mirror of
https://github.com/casdoor/casdoor.git
synced 2025-05-23 10:45:47 +08:00
feat: optimize batch-enforce (#1997)
This commit is contained in:
parent
cadb533595
commit
2c2ddfbb92
@ -135,8 +135,20 @@ func (c *ApiController) BatchEnforce() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
res := [][]bool{}
|
res := [][]bool{}
|
||||||
|
listPermissionIdMap := map[string][]string{}
|
||||||
|
|
||||||
for _, permission := range permissions {
|
for _, permission := range permissions {
|
||||||
enforceResult, err := object.BatchEnforce(permission.GetId(), &requests)
|
key := permission.Model + permission.Adapter
|
||||||
|
permissionIds, ok := listPermissionIdMap[key]
|
||||||
|
if !ok {
|
||||||
|
listPermissionIdMap[key] = []string{permission.GetId()}
|
||||||
|
} else {
|
||||||
|
listPermissionIdMap[key] = append(permissionIds, permission.GetId())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, permissionIds := range listPermissionIdMap {
|
||||||
|
enforceResult, err := object.BatchEnforce(permissionIds[0], &requests, permissionIds...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.ResponseError(err.Error())
|
c.ResponseError(err.Error())
|
||||||
return
|
return
|
||||||
@ -144,6 +156,7 @@ func (c *ApiController) BatchEnforce() {
|
|||||||
|
|
||||||
res = append(res, enforceResult)
|
res = append(res, enforceResult)
|
||||||
}
|
}
|
||||||
|
|
||||||
c.ResponseOk(res)
|
c.ResponseOk(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ import (
|
|||||||
xormadapter "github.com/casdoor/xorm-adapter/v3"
|
xormadapter "github.com/casdoor/xorm-adapter/v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getEnforcer(permission *Permission) *casbin.Enforcer {
|
func getEnforcer(permission *Permission, permissionIDs ...string) *casbin.Enforcer {
|
||||||
tableName := "permission_rule"
|
tableName := "permission_rule"
|
||||||
if len(permission.Adapter) != 0 {
|
if len(permission.Adapter) != 0 {
|
||||||
adapterObj, err := getCasbinAdapter(permission.Owner, permission.Adapter)
|
adapterObj, err := getCasbinAdapter(permission.Owner, permission.Adapter)
|
||||||
@ -77,8 +77,13 @@ func getEnforcer(permission *Permission) *casbin.Enforcer {
|
|||||||
|
|
||||||
enforcer.SetAdapter(adapter)
|
enforcer.SetAdapter(adapter)
|
||||||
|
|
||||||
|
policyFilterV5 := []string{permission.GetId()}
|
||||||
|
if len(permissionIDs) != 0 {
|
||||||
|
policyFilterV5 = permissionIDs
|
||||||
|
}
|
||||||
|
|
||||||
policyFilter := xormadapter.Filter{
|
policyFilter := xormadapter.Filter{
|
||||||
V5: []string{permission.GetId()},
|
V5: policyFilterV5,
|
||||||
}
|
}
|
||||||
|
|
||||||
if !HasRoleDefinition(m) {
|
if !HasRoleDefinition(m) {
|
||||||
@ -251,7 +256,7 @@ func Enforce(permissionId string, request *CasbinRequest) (bool, error) {
|
|||||||
return enforcer.Enforce(*request...)
|
return enforcer.Enforce(*request...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func BatchEnforce(permissionId string, requests *[]CasbinRequest) ([]bool, error) {
|
func BatchEnforce(permissionId string, requests *[]CasbinRequest, permissionIds ...string) ([]bool, error) {
|
||||||
permission, err := GetPermission(permissionId)
|
permission, err := GetPermission(permissionId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
res := []bool{}
|
res := []bool{}
|
||||||
@ -262,7 +267,7 @@ func BatchEnforce(permissionId string, requests *[]CasbinRequest) ([]bool, error
|
|||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
enforcer := getEnforcer(permission)
|
enforcer := getEnforcer(permission, permissionIds...)
|
||||||
return enforcer.BatchEnforce(*requests)
|
return enforcer.BatchEnforce(*requests)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user