Add checkModel() for UserGroupEnforcer

This commit is contained in:
Yang Luo 2023-08-24 18:16:23 +08:00
parent f5e0461cae
commit 1eeeb64a0c

View File

@ -1,6 +1,8 @@
package object package object
import ( import (
"fmt"
"github.com/casbin/casbin/v2" "github.com/casbin/casbin/v2"
"github.com/casbin/casbin/v2/errors" "github.com/casbin/casbin/v2/errors"
"github.com/casdoor/casdoor/util" "github.com/casdoor/casdoor/util"
@ -17,11 +19,28 @@ func NewUserGroupEnforcer(enforcer *casbin.Enforcer) *UserGroupEnforcer {
} }
} }
func (e *UserGroupEnforcer) checkModel() error {
if _, ok := e.enforcer.GetModel()["g"]; !ok {
return fmt.Errorf("The Casbin model used by enforcer doesn't support RBAC (\"[role_definition]\" section not found), please use a RBAC enabled Casbin model for the enforcer")
}
return nil
}
func (e *UserGroupEnforcer) AddGroupForUser(user string, group string) (bool, error) { func (e *UserGroupEnforcer) AddGroupForUser(user string, group string) (bool, error) {
err := e.checkModel()
if err != nil {
return false, err
}
return e.enforcer.AddRoleForUser(user, GetGroupWithPrefix(group)) return e.enforcer.AddRoleForUser(user, GetGroupWithPrefix(group))
} }
func (e *UserGroupEnforcer) AddGroupsForUser(user string, groups []string) (bool, error) { func (e *UserGroupEnforcer) AddGroupsForUser(user string, groups []string) (bool, error) {
err := e.checkModel()
if err != nil {
return false, err
}
g := make([]string, len(groups)) g := make([]string, len(groups))
for i, group := range groups { for i, group := range groups {
g[i] = GetGroupWithPrefix(group) g[i] = GetGroupWithPrefix(group)
@ -30,14 +49,29 @@ func (e *UserGroupEnforcer) AddGroupsForUser(user string, groups []string) (bool
} }
func (e *UserGroupEnforcer) DeleteGroupForUser(user string, group string) (bool, error) { func (e *UserGroupEnforcer) DeleteGroupForUser(user string, group string) (bool, error) {
err := e.checkModel()
if err != nil {
return false, err
}
return e.enforcer.DeleteRoleForUser(user, GetGroupWithPrefix(group)) return e.enforcer.DeleteRoleForUser(user, GetGroupWithPrefix(group))
} }
func (e *UserGroupEnforcer) DeleteGroupsForUser(user string) (bool, error) { func (e *UserGroupEnforcer) DeleteGroupsForUser(user string) (bool, error) {
err := e.checkModel()
if err != nil {
return false, err
}
return e.enforcer.DeleteRolesForUser(user) return e.enforcer.DeleteRolesForUser(user)
} }
func (e *UserGroupEnforcer) GetGroupsForUser(user string) ([]string, error) { func (e *UserGroupEnforcer) GetGroupsForUser(user string) ([]string, error) {
err := e.checkModel()
if err != nil {
return nil, err
}
groups, err := e.enforcer.GetRolesForUser(user) groups, err := e.enforcer.GetRolesForUser(user)
for i, group := range groups { for i, group := range groups {
groups[i] = GetGroupWithoutPrefix(group) groups[i] = GetGroupWithoutPrefix(group)
@ -46,6 +80,11 @@ func (e *UserGroupEnforcer) GetGroupsForUser(user string) ([]string, error) {
} }
func (e *UserGroupEnforcer) GetAllUsersByGroup(group string) ([]string, error) { func (e *UserGroupEnforcer) GetAllUsersByGroup(group string) ([]string, error) {
err := e.checkModel()
if err != nil {
return nil, err
}
users, err := e.enforcer.GetUsersForRole(GetGroupWithPrefix(group)) users, err := e.enforcer.GetUsersForRole(GetGroupWithPrefix(group))
if err != nil { if err != nil {
if err == errors.ERR_NAME_NOT_FOUND { if err == errors.ERR_NAME_NOT_FOUND {
@ -65,13 +104,17 @@ func GetGroupWithoutPrefix(group string) string {
} }
func (e *UserGroupEnforcer) GetUserNamesByGroupName(groupName string) ([]string, error) { func (e *UserGroupEnforcer) GetUserNamesByGroupName(groupName string) ([]string, error) {
var names []string err := e.checkModel()
if err != nil {
return nil, err
}
userIds, err := e.GetAllUsersByGroup(groupName) userIds, err := e.GetAllUsersByGroup(groupName)
if err != nil { if err != nil {
return nil, err return nil, err
} }
names := []string{}
for _, userId := range userIds { for _, userId := range userIds {
_, name := util.GetOwnerAndNameFromIdNoCheck(userId) _, name := util.GetOwnerAndNameFromIdNoCheck(userId)
names = append(names, name) names = append(names, name)
@ -81,7 +124,12 @@ func (e *UserGroupEnforcer) GetUserNamesByGroupName(groupName string) ([]string,
} }
func (e *UserGroupEnforcer) UpdateGroupsForUser(user string, groups []string) (bool, error) { func (e *UserGroupEnforcer) UpdateGroupsForUser(user string, groups []string) (bool, error) {
_, err := e.DeleteGroupsForUser(user) err := e.checkModel()
if err != nil {
return false, err
}
_, err = e.DeleteGroupsForUser(user)
if err != nil { if err != nil {
return false, err return false, err
} }