Refactor getPermissionsAndRolesByUser() related code

This commit is contained in:
Yang Luo 2023-09-24 08:01:18 +08:00
parent 111d1a5786
commit 687830697e
5 changed files with 27 additions and 21 deletions

View File

@ -226,7 +226,7 @@ func GetGroupUserCount(groupId string, field, value string) (int64, error) {
} else { } else {
return ormer.Engine.Table("user"). return ormer.Engine.Table("user").
Where("owner = ?", owner).In("name", names). Where("owner = ?", owner).In("name", names).
And(fmt.Sprintf("user.%s LIKE ?", util.CamelToSnakeCase(field)), "%"+value+"%"). And(fmt.Sprintf("user.%s like ?", util.CamelToSnakeCase(field)), "%"+value+"%").
Count() Count()
} }
} }
@ -247,7 +247,7 @@ func GetPaginationGroupUsers(groupId string, offset, limit int, field, value, so
} }
if field != "" && value != "" { if field != "" && value != "" {
session = session.And(fmt.Sprintf("user.%s LIKE ?", util.CamelToSnakeCase(field)), "%"+value+"%") session = session.And(fmt.Sprintf("user.%s like ?", util.CamelToSnakeCase(field)), "%"+value+"%")
} }
if sortField == "" || sortOrder == "" { if sortField == "" || sortOrder == "" {

View File

@ -258,9 +258,18 @@ func DeletePermission(permission *Permission) (bool, error) {
return affected != 0, nil return affected != 0, nil
} }
func GetPermissionsAndRolesByUser(userId string) ([]*Permission, []*Role, error) { func getPermissionsByUser(userId string) ([]*Permission, error) {
permissions := []*Permission{} permissions := []*Permission{}
err := ormer.Engine.Where("users like ?", "%"+userId+"\"%").Find(&permissions) err := ormer.Engine.Where("users like ?", "%"+userId+"\"%").Find(&permissions)
if err != nil {
return permissions, err
}
return permissions, nil
}
func getPermissionsAndRolesByUser(userId string) ([]*Permission, []*Role, error) {
permissions, err := getPermissionsByUser(userId)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
@ -277,14 +286,13 @@ func GetPermissionsAndRolesByUser(userId string) ([]*Permission, []*Role, error)
permFromRoles := []*Permission{} permFromRoles := []*Permission{}
roles, err := GetRolesByUser(userId) roles, err := getRolesByUser(userId)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
for _, role := range roles { for _, role := range roles {
perms := []*Permission{} perms, err := GetPermissionsByRole(role.GetId())
err := ormer.Engine.Where("roles like ?", "%"+role.GetId()+"\"%").Find(&perms)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }

View File

@ -258,7 +258,7 @@ func BatchEnforce(permission *Permission, requests *[]CasbinRequest, permissionI
} }
func getAllValues(userId string, fn func(enforcer *casbin.Enforcer) []string) []string { func getAllValues(userId string, fn func(enforcer *casbin.Enforcer) []string) []string {
permissions, _, err := GetPermissionsAndRolesByUser(userId) permissions, _, err := getPermissionsAndRolesByUser(userId)
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -293,7 +293,7 @@ func GetAllActions(userId string) []string {
} }
func GetAllRoles(userId string) []string { func GetAllRoles(userId string) []string {
roles, err := GetRolesByUser(userId) roles, err := getRolesByUser(userId)
if err != nil { if err != nil {
panic(err) panic(err)
} }

View File

@ -252,15 +252,23 @@ func (role *Role) GetId() string {
return fmt.Sprintf("%s/%s", role.Owner, role.Name) return fmt.Sprintf("%s/%s", role.Owner, role.Name)
} }
func GetRolesByUser(userId string) ([]*Role, error) { func getRolesByUserInternal(userId string) ([]*Role, error) {
roles := []*Role{} roles := []*Role{}
err := ormer.Engine.Where("users like ?", "%"+userId+"\"%").Find(&roles) err := ormer.Engine.Where("users like ?", "%"+userId+"\"%").Find(&roles)
if err != nil { if err != nil {
return roles, err return roles, err
} }
allRolesIds := make([]string, 0, len(roles)) return roles, nil
}
func getRolesByUser(userId string) ([]*Role, error) {
roles, err := getRolesByUserInternal(userId)
if err != nil {
return roles, err
}
allRolesIds := []string{}
for _, role := range roles { for _, role := range roles {
allRolesIds = append(allRolesIds, role.GetId()) allRolesIds = append(allRolesIds, role.GetId())
} }
@ -336,16 +344,6 @@ func GetMaskedRoles(roles []*Role) []*Role {
return roles return roles
} }
func GetRolesByNamePrefix(owner string, prefix string) ([]*Role, error) {
roles := []*Role{}
err := ormer.Engine.Where("owner=? and name like ?", owner, prefix+"%").Find(&roles)
if err != nil {
return roles, err
}
return roles, nil
}
// GetAncestorRoles returns a list of roles that contain the given roleIds // GetAncestorRoles returns a list of roles that contain the given roleIds
func GetAncestorRoles(roleIds ...string) ([]*Role, error) { func GetAncestorRoles(roleIds ...string) ([]*Role, error) {
var ( var (

View File

@ -796,7 +796,7 @@ func ExtendUserWithRolesAndPermissions(user *User) (err error) {
return return
} }
user.Permissions, user.Roles, err = GetPermissionsAndRolesByUser(user.GetId()) user.Permissions, user.Roles, err = getPermissionsAndRolesByUser(user.GetId())
if err != nil { if err != nil {
return err return err
} }