2021-09-28 11:47:19 +08:00
|
|
|
|
package role
|
|
|
|
|
|
|
|
|
|
import (
|
2021-10-15 15:06:02 +08:00
|
|
|
|
"SciencesServer/app/api/manage/controller"
|
|
|
|
|
model3 "SciencesServer/app/api/manage/model"
|
2021-09-28 11:47:19 +08:00
|
|
|
|
model2 "SciencesServer/app/common/model"
|
|
|
|
|
"SciencesServer/serve/logger"
|
|
|
|
|
|
|
|
|
|
"SciencesServer/app/service"
|
|
|
|
|
"SciencesServer/serve/orm"
|
|
|
|
|
"SciencesServer/utils"
|
|
|
|
|
|
|
|
|
|
"gorm.io/gorm"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type User struct{ *controller.Platform }
|
|
|
|
|
|
|
|
|
|
type UserHandle func(session *service.Session) *User
|
|
|
|
|
|
|
|
|
|
// List 列表信息
|
2021-10-15 15:06:02 +08:00
|
|
|
|
func (c *User) List(uid uint64) ([]*model3.SysRoleUserInfo, error) {
|
|
|
|
|
mSysRole := model3.NewSysRole()
|
2021-09-28 11:47:19 +08:00
|
|
|
|
|
|
|
|
|
out, err := mSysRole.UserRole(uid)
|
|
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
return out, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Bind 绑定角色
|
|
|
|
|
func (c *User) Bind(uid uint64, roleIDs []uint64) error {
|
2021-10-15 15:06:02 +08:00
|
|
|
|
mSysUserRole := model3.NewSysUserRole()
|
2021-09-28 11:47:19 +08:00
|
|
|
|
|
|
|
|
|
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 NewUser() UserHandle {
|
|
|
|
|
return func(session *service.Session) *User {
|
|
|
|
|
return &User{Platform: &controller.Platform{Session: session}}
|
|
|
|
|
}
|
|
|
|
|
}
|