mirror of
https://github.com/casdoor/casdoor.git
synced 2025-05-24 08:20:31 +08:00
fix: support RBAC With Domains/Tenants (#1333)
* feat: support RBAC With Domains/Tenants * fix: add verify for `UpdatePermission` * Update permission.go Co-authored-by: hsluoyz <hsluoyz@qq.com>
This commit is contained in:
parent
0856977b92
commit
78e45d07cf
@ -111,7 +111,27 @@ func GetPermission(id string) *Permission {
|
|||||||
return getPermission(owner, name)
|
return getPermission(owner, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// checkPermissionValid verifies if the permission is valid
|
||||||
|
func checkPermissionValid(permission *Permission) {
|
||||||
|
enforcer := getEnforcer(permission)
|
||||||
|
enforcer.EnableAutoSave(false)
|
||||||
|
policies, groupingPolicies := getPolicies(permission)
|
||||||
|
|
||||||
|
if len(groupingPolicies) > 0 {
|
||||||
|
_, err := enforcer.AddGroupingPolicies(groupingPolicies)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := enforcer.AddPolicies(policies)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func UpdatePermission(id string, permission *Permission) bool {
|
func UpdatePermission(id string, permission *Permission) bool {
|
||||||
|
checkPermissionValid(permission)
|
||||||
owner, name := util.GetOwnerAndNameFromId(id)
|
owner, name := util.GetOwnerAndNameFromId(id)
|
||||||
oldPermission := getPermission(owner, name)
|
oldPermission := getPermission(owner, name)
|
||||||
if oldPermission == nil {
|
if oldPermission == nil {
|
||||||
|
@ -157,7 +157,12 @@ func removePolicies(permission *Permission) {
|
|||||||
func Enforce(permissionRule *PermissionRule) bool {
|
func Enforce(permissionRule *PermissionRule) bool {
|
||||||
permission := GetPermission(permissionRule.Id)
|
permission := GetPermission(permissionRule.Id)
|
||||||
enforcer := getEnforcer(permission)
|
enforcer := getEnforcer(permission)
|
||||||
allow, err := enforcer.Enforce(permissionRule.V0, permissionRule.V1, permissionRule.V2)
|
|
||||||
|
request := []interface{}{permissionRule.V0, permissionRule.V1, permissionRule.V2}
|
||||||
|
if permissionRule.V3 != "" {
|
||||||
|
request = append(request, permissionRule.V3)
|
||||||
|
}
|
||||||
|
allow, err := enforcer.Enforce(request...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@ -167,7 +172,11 @@ func Enforce(permissionRule *PermissionRule) bool {
|
|||||||
func BatchEnforce(permissionRules []PermissionRule) []bool {
|
func BatchEnforce(permissionRules []PermissionRule) []bool {
|
||||||
var requests [][]interface{}
|
var requests [][]interface{}
|
||||||
for _, permissionRule := range permissionRules {
|
for _, permissionRule := range permissionRules {
|
||||||
requests = append(requests, []interface{}{permissionRule.V0, permissionRule.V1, permissionRule.V2})
|
if permissionRule.V3 != "" {
|
||||||
|
requests = append(requests, []interface{}{permissionRule.V0, permissionRule.V1, permissionRule.V2, permissionRule.V3})
|
||||||
|
} else {
|
||||||
|
requests = append(requests, []interface{}{permissionRule.V0, permissionRule.V1, permissionRule.V2})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
permission := GetPermission(permissionRules[0].Id)
|
permission := GetPermission(permissionRules[0].Id)
|
||||||
enforcer := getEnforcer(permission)
|
enforcer := getEnforcer(permission)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user