From 776a682fae5a9f8f749f2dcf2080cd470c585ae0 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 12 May 2023 21:32:48 +0800 Subject: [PATCH] Improve args of Enforce() API --- controllers/enforcer.go | 16 ++++++++++------ object/permission.go | 36 ++++++++++------------------------- object/permission_enforcer.go | 27 +++++++++++++------------- 3 files changed, 33 insertions(+), 46 deletions(-) diff --git a/controllers/enforcer.go b/controllers/enforcer.go index 22809c94..25386d32 100644 --- a/controllers/enforcer.go +++ b/controllers/enforcer.go @@ -21,26 +21,30 @@ import ( ) func (c *ApiController) Enforce() { - var permissionRule object.PermissionRule - err := json.Unmarshal(c.Ctx.Input.RequestBody, &permissionRule) + permissionId := c.Input().Get("permissionId") + + var request object.CasbinRequest + err := json.Unmarshal(c.Ctx.Input.RequestBody, &request) if err != nil { c.ResponseError(err.Error()) return } - c.Data["json"] = object.Enforce(&permissionRule) + c.Data["json"] = object.Enforce(permissionId, &request) c.ServeJSON() } func (c *ApiController) BatchEnforce() { - var permissionRules []object.PermissionRule - err := json.Unmarshal(c.Ctx.Input.RequestBody, &permissionRules) + permissionId := c.Input().Get("permissionId") + + var requests []object.CasbinRequest + err := json.Unmarshal(c.Ctx.Input.RequestBody, &requests) if err != nil { c.ResponseError(err.Error()) return } - c.Data["json"] = object.BatchEnforce(permissionRules) + c.Data["json"] = object.BatchEnforce(permissionId, &requests) c.ServeJSON() } diff --git a/object/permission.go b/object/permission.go index 6a57240d..4a4290ad 100644 --- a/object/permission.go +++ b/object/permission.go @@ -15,8 +15,6 @@ package object import ( - "fmt" - "github.com/casdoor/casdoor/util" "github.com/xorm-io/core" ) @@ -65,30 +63,6 @@ func (p *Permission) GetId() string { return util.GetId(p.Owner, p.Name) } -func (p *PermissionRule) GetRequest(adapterName string, permissionId string) ([]interface{}, error) { - request := []interface{}{p.V0, p.V1, p.V2} - - if p.V3 != "" { - request = append(request, p.V3) - } - - if p.V4 != "" { - request = append(request, p.V4) - } - - if adapterName == builtInAdapter { - if p.V5 != "" { - return nil, fmt.Errorf("too many parameters. The maximum parameter number cannot exceed %d", builtInAvailableField) - } - return request, nil - } else { - if p.V5 != "" { - request = append(request, p.V5) - } - return request, nil - } -} - func GetPermissionCount(owner, field, value string) int { session := GetSession(owner, -1, -1, field, value, "", "") count, err := session.Count(&Permission{}) @@ -271,6 +245,16 @@ func GetPermissionsBySubmitter(owner string, submitter string) []*Permission { return permissions } +func GetPermissionsByModel(owner string, model string) []*Permission { + permissions := []*Permission{} + err := adapter.Engine.Desc("created_time").Find(&permissions, &Permission{Owner: owner, Model: model}) + if err != nil { + panic(err) + } + + return permissions +} + func ContainsAsterisk(userId string, users []string) bool { containsAsterisk := false group, _ := util.GetOwnerAndNameFromId(userId) diff --git a/object/permission_enforcer.go b/object/permission_enforcer.go index 0ae9daaf..5a53afb2 100644 --- a/object/permission_enforcer.go +++ b/object/permission_enforcer.go @@ -62,7 +62,11 @@ func getEnforcer(permission *Permission) *casbin.Enforcer { panic(err) } - enforcer.InitWithModelAndAdapter(m, nil) + err = enforcer.InitWithModelAndAdapter(m, nil) + if err != nil { + panic(err) + } + enforcer.SetAdapter(adapter) policyFilter := xormadapter.Filter{ @@ -216,28 +220,23 @@ func removePolicies(permission *Permission) { } } -func Enforce(permissionRule *PermissionRule) bool { - permission := GetPermission(permissionRule.Id) +type CasbinRequest = []interface{} + +func Enforce(permissionId string, request *CasbinRequest) bool { + permission := GetPermission(permissionId) enforcer := getEnforcer(permission) - request, _ := permissionRule.GetRequest(builtInAdapter, permissionRule.Id) - - allow, err := enforcer.Enforce(request...) + allow, err := enforcer.Enforce(*request...) if err != nil { panic(err) } return allow } -func BatchEnforce(permissionRules []PermissionRule) []bool { - var requests [][]interface{} - for _, permissionRule := range permissionRules { - request, _ := permissionRule.GetRequest(builtInAdapter, permissionRule.Id) - requests = append(requests, request) - } - permission := GetPermission(permissionRules[0].Id) +func BatchEnforce(permissionId string, requests *[]CasbinRequest) []bool { + permission := GetPermission(permissionId) enforcer := getEnforcer(permission) - allow, err := enforcer.BatchEnforce(requests) + allow, err := enforcer.BatchEnforce(*requests) if err != nil { panic(err) }