From d145ab780c22bd143c7f29aae5ac03af261cce9a Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sun, 24 Sep 2023 09:13:54 +0800 Subject: [PATCH] feat: fix wrong elements in getPermissionsByUser() related functions --- object/permission.go | 63 +++++++++++++++++++++++++++++--------------- object/role.go | 9 ++++++- 2 files changed, 50 insertions(+), 22 deletions(-) diff --git a/object/permission.go b/object/permission.go index f28d6eff..483e5c8c 100644 --- a/object/permission.go +++ b/object/permission.go @@ -265,7 +265,48 @@ func getPermissionsByUser(userId string) ([]*Permission, error) { return permissions, err } - return permissions, nil + res := []*Permission{} + for _, permission := range permissions { + if util.InSlice(permission.Users, userId) { + res = append(res, permission) + } + } + + return res, nil +} + +func GetPermissionsByRole(roleId string) ([]*Permission, error) { + permissions := []*Permission{} + err := ormer.Engine.Where("roles like ?", "%"+roleId+"\"%").Find(&permissions) + if err != nil { + return permissions, err + } + + res := []*Permission{} + for _, permission := range permissions { + if util.InSlice(permission.Roles, roleId) { + res = append(res, permission) + } + } + + return res, nil +} + +func GetPermissionsByResource(resourceId string) ([]*Permission, error) { + permissions := []*Permission{} + err := ormer.Engine.Where("resources like ?", "%"+resourceId+"\"%").Find(&permissions) + if err != nil { + return permissions, err + } + + res := []*Permission{} + for _, permission := range permissions { + if util.InSlice(permission.Resources, resourceId) { + res = append(res, permission) + } + } + + return res, nil } func getPermissionsAndRolesByUser(userId string) ([]*Permission, []*Role, error) { @@ -310,26 +351,6 @@ func getPermissionsAndRolesByUser(userId string) ([]*Permission, []*Role, error) return permissions, roles, nil } -func GetPermissionsByRole(roleId string) ([]*Permission, error) { - permissions := []*Permission{} - err := ormer.Engine.Where("roles like ?", "%"+roleId+"\"%").Find(&permissions) - if err != nil { - return permissions, err - } - - return permissions, nil -} - -func GetPermissionsByResource(resourceId string) ([]*Permission, error) { - permissions := []*Permission{} - err := ormer.Engine.Where("resources like ?", "%"+resourceId+"\"%").Find(&permissions) - if err != nil { - return permissions, err - } - - return permissions, nil -} - func GetPermissionsBySubmitter(owner string, submitter string) ([]*Permission, error) { permissions := []*Permission{} err := ormer.Engine.Desc("created_time").Find(&permissions, &Permission{Owner: owner, Submitter: submitter}) diff --git a/object/role.go b/object/role.go index 1ca0b1aa..90622425 100644 --- a/object/role.go +++ b/object/role.go @@ -259,7 +259,14 @@ func getRolesByUserInternal(userId string) ([]*Role, error) { return roles, err } - return roles, nil + res := []*Role{} + for _, role := range roles { + if util.InSlice(role.Users, userId) { + res = append(res, role) + } + } + + return res, nil } func getRolesByUser(userId string) ([]*Role, error) {