Refactor CheckLoginPermission() code

This commit is contained in:
Yang Luo
2023-09-15 02:47:53 +08:00
parent b633ecdcf2
commit 616629ef99
3 changed files with 50 additions and 36 deletions

View File

@ -350,7 +350,7 @@ func CheckUserPermission(requestUserId, userId string, strict bool, lang string)
return hasPermission, fmt.Errorf(i18n.Translate(lang, "auth:Unauthorized operation"))
}
func CheckAccessPermission(userId string, application *Application) (bool, error) {
func CheckLoginPermission(userId string, application *Application) (bool, error) {
var err error
if userId == "built-in/admin" {
return true, nil
@ -361,32 +361,40 @@ func CheckAccessPermission(userId string, application *Application) (bool, error
return false, err
}
allowed := true
allowCount := 0
denyCount := 0
for _, permission := range permissions {
if !permission.IsEnabled {
if !permission.IsEnabled || permission.ResourceType != "Application" || !permission.isResourceHit(application.Name) {
continue
}
isHit := false
for _, resource := range permission.Resources {
if application.Name == resource {
isHit = true
break
}
if permission.isUserHit(userId) {
allowCount += 1
}
if isHit {
containsAsterisk := ContainsAsterisk(userId, permission.Users)
if containsAsterisk {
return true, err
enforcer := getPermissionEnforcer(permission)
var isAllowed bool
isAllowed, err = enforcer.Enforce(userId, application.Name, "Read")
if err != nil {
return false, err
}
if isAllowed {
if permission.Effect == "Allow" {
allowCount += 1
}
enforcer := getPermissionEnforcer(permission)
if allowed, err = enforcer.Enforce(userId, application.Name, "read"); allowed {
return allowed, err
} else {
if permission.Effect == "Deny" {
denyCount += 1
}
}
}
return allowed, err
if denyCount > 0 {
return false, nil
}
return true, nil
}
func CheckUsername(username string, lang string) string {