82 lines
1.9 KiB
Go
82 lines
1.9 KiB
Go
package user
|
||
|
||
import (
|
||
"SciencesServer/app/api/controller"
|
||
model2 "SciencesServer/app/common/model"
|
||
"SciencesServer/serve/logger"
|
||
|
||
"SciencesServer/app/api/model"
|
||
"SciencesServer/app/service"
|
||
"SciencesServer/serve/orm"
|
||
"SciencesServer/utils"
|
||
|
||
"gorm.io/gorm"
|
||
)
|
||
|
||
type Role struct{ *controller.Platform }
|
||
|
||
type RoleHandle func(session *service.Session) *Role
|
||
|
||
// List 列表信息
|
||
func (c *Role) List(uid uint64) ([]*model.SysRoleUserInfo, error) {
|
||
mSysRole := model.NewSysRole()
|
||
|
||
out, err := mSysRole.UserRole(uid)
|
||
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
return out, nil
|
||
}
|
||
|
||
// Bind 绑定角色
|
||
func (c *Role) Bind(uid uint64, roleIDs []uint64) error {
|
||
mSysUserRole := model.NewSysUserRole()
|
||
|
||
return orm.GetDB().Transaction(func(tx *gorm.DB) error {
|
||
err := model2.DeleteWhere(mSysUserRole.SysUserRole, []*model2.ModelWhere{model2.NewWhere("uid", uid)}, tx)
|
||
|
||
if err != nil {
|
||
return err
|
||
}
|
||
roles := make([]*model2.SysUserRole, 0)
|
||
obj := make([]string, 0)
|
||
|
||
mark := make(map[uint64]uint64, 0)
|
||
|
||
for _, v := range roleIDs {
|
||
if _, has := mark[v]; has {
|
||
continue
|
||
}
|
||
obj = append(obj, utils.UintToString(v))
|
||
|
||
roles = append(roles, &model2.SysUserRole{
|
||
UID: uid, RoleID: v,
|
||
})
|
||
mark[v] = v
|
||
}
|
||
if err = model2.Creates(mSysUserRole.SysUserRole, roles, tx); err != nil {
|
||
return err
|
||
}
|
||
go utils.TryCatch(func() {
|
||
permission := service.NewPermission(obj)(c.TenantKey, utils.UintToString(uid))
|
||
|
||
if _, err = permission.DeleteRolesForUser(false); err != nil {
|
||
logger.ErrorF("删除用户【%d】角色权限错误:%v", uid, err)
|
||
return
|
||
}
|
||
if _, err = permission.AddRoleForUser(); err != nil {
|
||
logger.ErrorF("添加用户【%d】角色权限错误:%v", uid, err)
|
||
return
|
||
}
|
||
})
|
||
return nil
|
||
})
|
||
}
|
||
|
||
func NewRole() RoleHandle {
|
||
return func(session *service.Session) *Role {
|
||
return &Role{Platform: &controller.Platform{Session: session}}
|
||
}
|
||
}
|