| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- package auth_service
- import (
- "fmt"
- "gfast/app/model/admin/auth_rule"
- "gfast/app/model/admin/role"
- "gfast/app/model/admin/user"
- "gfast/app/model/admin/user_post"
- "gfast/app/service/casbin_adapter_service"
- "gfast/library/utils"
- "github.com/gogf/gf/database/gdb"
- "github.com/gogf/gf/errors/gerror"
- "github.com/gogf/gf/frame/g"
- "github.com/gogf/gf/text/gstr"
- "github.com/gogf/gf/util/gconv"
- )
- //获取MenuType==0,1菜单列表
- func GetIsMenuList() ([]*auth_rule.Entity, error) {
- list, err := GetMenuList()
- if err != nil {
- return nil, err
- }
- var gList = make([]*auth_rule.Entity, 0, len(list))
- for _, v := range list {
- if v.MenuType == 0 || v.MenuType == 1 {
- gList = append(gList, v)
- }
- }
- return gList, nil
- }
- //获取isMenu=0|1且status=1的菜单列表
- func GetIsMenuStatusList() ([]*auth_rule.Entity, error) {
- list, err := GetMenuList()
- if err != nil {
- return nil, err
- }
- var gList = make([]*auth_rule.Entity, 0, len(list))
- for _, v := range list {
- if (v.MenuType == 0 || v.MenuType == 1) && v.Status == 1 {
- gList = append(gList, v)
- }
- }
- return gList, nil
- }
- //获取所有按钮isMenu=2 且status=1的菜单列表
- func GetIsButtonStatusList() ([]*auth_rule.Entity, error) {
- list, err := GetMenuList()
- if err != nil {
- return nil, err
- }
- var gList = make([]*auth_rule.Entity, 0, len(list))
- for _, v := range list {
- if v.MenuType == 2 && v.Status == 1 {
- gList = append(gList, v)
- }
- }
- return gList, nil
- }
- //获取status==1的菜单列表
- func GetMenuIsStatusList() ([]*auth_rule.Entity, error) {
- list, err := GetMenuList()
- if err != nil {
- return nil, err
- }
- var gList = make([]*auth_rule.Entity, 0, len(list))
- for _, v := range list {
- if v.Status == 1 {
- gList = append(gList, v)
- }
- }
- return gList, nil
- }
- //获取所有菜单
- func GetMenuList() (list []*auth_rule.Entity, err error) {
- return auth_rule.GetMenuList()
- }
- func GetMenuListSearch(req *auth_rule.ReqSearch) (list []*auth_rule.Entity, err error) {
- list, err = auth_rule.GetMenuList()
- if err != nil {
- return
- }
- if req != nil {
- tmpList := make([]*auth_rule.Entity, 0, len(list))
- for _, entity := range list {
- if (req.Title == "" || gstr.Contains(gstr.ToUpper(entity.Title), gstr.ToUpper(req.Title))) &&
- (req.Status == "" || gconv.Uint(req.Status) == entity.Status) {
- tmpList = append(tmpList, entity)
- }
- }
- list = tmpList
- }
- return
- }
- //检查菜单规则是否存在
- func CheckMenuNameUnique(name string, id int) bool {
- return auth_rule.CheckMenuNameUnique(name, id)
- }
- //检查菜单路由地址是否已经存在
- func CheckMenuPathUnique(path string, id int) bool {
- return auth_rule.CheckMenuPathUnique(path, id)
- }
- // 添加菜单操作
- func AddMenu(req *auth_rule.MenuReq) (err error, insertId int64) {
- return auth_rule.Add(req)
- }
- //修改菜单操作
- func EditMenu(req *auth_rule.MenuReq, id int) (err error, rows int64) {
- return auth_rule.Edit(req, id)
- }
- //获取用户组(角色)列表
- func GetRoleList() (list []*role.Entity, err error) {
- return role.GetList()
- }
- func GetRoleListSearch(req *role.SelectPageReq) (total, page int, list []*role.Entity, err error) {
- return role.GetRoleListSearch(req)
- }
- //保存角色信息并返回插入的id
- func AddRole(tx *gdb.TX, data map[string]interface{}) (InsId int64, err error) {
- return role.Add(tx, data)
- }
- //添加角色授权规则
- func AddRoleRule(iRule interface{}, roleId int64) (err error) {
- enforcer, e := casbin_adapter_service.GetEnforcer()
- if e != nil {
- err = e
- return
- }
- rule := gconv.Strings(iRule)
- for _, v := range rule {
- _, err = enforcer.AddPolicy(fmt.Sprintf("g_%d", roleId), fmt.Sprintf("r_%s", v), "All")
- if err != nil {
- return
- }
- }
- return
- }
- //修改角色信息操作
- func EditRole(tx *gdb.TX, data map[string]interface{}) (err error) {
- return role.Edit(tx, data)
- }
- func StatusSetRole(req *role.StatusSetReq) error {
- return role.StatusSetRole(req)
- }
- func RoleDataScope(req *role.DataScopeReq) error {
- return role.DataScope(req)
- }
- //修改角色的授权规则
- func EditRoleRule(iRule interface{}, roleId int64) (err error) {
- enforcer, e := casbin_adapter_service.GetEnforcer()
- if e != nil {
- err = e
- return
- }
- //查询当前权限
- gp := enforcer.GetFilteredPolicy(0, fmt.Sprintf("g_%d", roleId))
- //删除旧权限
- for _, v := range gp {
- _, e = enforcer.RemovePolicy(v)
- if e != nil {
- err = e
- return
- }
- }
- rule := gconv.Strings(iRule)
- for _, v := range rule {
- _, err = enforcer.AddPolicy(fmt.Sprintf("g_%d", roleId), fmt.Sprintf("r_%s", v), "All")
- if err != nil {
- return
- }
- }
- return
- }
- //删除角色权限操作
- func DeleteRoleRule(roleId int) (err error) {
- return role.DeleteRoleRule(roleId)
- }
- //添加管理员操作
- func AddUser(req *user.AddUserReq) (InsertId int64, err error) {
- //密码加密
- req.Password = utils.EncryptCBC(gconv.String(req.Password), utils.AdminCbcPublicKey)
- return user.Add(req)
- }
- //修改用户信息
- func EditUser(req *user.EditUserReq) (err error) {
- return user.Edit(req)
- }
- //添加用户角色信息
- func AddUserRole(roleIds interface{}, userId int64) (err error) {
- enforcer, e := casbin_adapter_service.GetEnforcer()
- if e != nil {
- err = e
- return
- }
- rule := gconv.Ints(roleIds)
- for _, v := range rule {
- _, err = enforcer.AddGroupingPolicy(fmt.Sprintf("u_%d", userId), fmt.Sprintf("g_%d", v))
- if err != nil {
- return
- }
- }
- return
- }
- //添加用户岗位信息
- func AddUserPost(postIds []int64, userId int64) (err error) {
- //删除旧岗位信息
- err = user_post.DeleteByUserId(userId)
- if err != nil {
- g.Log().Error(err)
- err = gerror.New("设置用户岗位信息失败")
- }
- //添加用户岗位信息
- err = user_post.AddUserPost(postIds, userId)
- if err != nil {
- g.Log().Error(err)
- err = gerror.New("设置用户岗位信息失败")
- }
- return
- }
- //修改用户角色信息
- func EditUserRole(roleIds interface{}, userId int) (err error) {
- enforcer, e := casbin_adapter_service.GetEnforcer()
- if e != nil {
- err = e
- return
- }
- rule := gconv.Ints(roleIds)
- //删除用户旧角色信息
- enforcer.RemoveFilteredGroupingPolicy(0, fmt.Sprintf("u_%d", userId))
- for _, v := range rule {
- _, err = enforcer.AddGroupingPolicy(fmt.Sprintf("u_%d", userId), fmt.Sprintf("g_%d", v))
- if err != nil {
- return
- }
- }
- return
- }
- func DeleteRoleByIds(ids []int) (err error) {
- return role.DeleteByIds(ids)
- }
- //删除菜单
- func DeleteMenuByIds(ids []int) (err error) {
- return auth_rule.DeleteByIds(ids)
- }
|