122 lines
2.7 KiB
Go
122 lines
2.7 KiB
Go
package user
|
|
|
|
import (
|
|
model2 "ArmedPolice/app/common/model"
|
|
"ArmedPolice/app/model"
|
|
"ArmedPolice/app/service"
|
|
"ArmedPolice/serve/orm"
|
|
"ArmedPolice/utils"
|
|
"errors"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type Role struct{ *service.Session }
|
|
|
|
type RoleHandle func(session *service.Session) *Role
|
|
|
|
// RoleInfo 基本信息
|
|
type RoleInfo struct {
|
|
ID string `json:"id"`
|
|
ParentID string `json:"parent_id"`
|
|
Name string `json:"name"`
|
|
Checked bool `json:"checked"`
|
|
Children []*RoleInfo `json:"children"`
|
|
}
|
|
|
|
func (c *Role) tree(iModel model2.IModel, src []*model.SysRoleUserInfo, parentID uint64) []*RoleInfo {
|
|
out := make([]*RoleInfo, 0)
|
|
|
|
for _, v := range src {
|
|
if v.ParentID == parentID {
|
|
iModel.SetID(v.ID)
|
|
id := iModel.GetEncodeID()
|
|
|
|
_parentID := ""
|
|
|
|
if v.ParentID > 0 {
|
|
iModel.SetID(v.ID)
|
|
_parentID = iModel.GetEncodeID()
|
|
}
|
|
out = append(out, &RoleInfo{
|
|
ID: id,
|
|
ParentID: _parentID,
|
|
Name: v.Name,
|
|
Checked: v.UserRoleID > 0,
|
|
Children: c.tree(iModel, src, v.ID),
|
|
})
|
|
}
|
|
}
|
|
return out
|
|
}
|
|
|
|
// List 列表信息
|
|
func (c *Role) List(id uint64) ([]*RoleInfo, error) {
|
|
mSysUser := model.NewSysUser()
|
|
mSysUser.ID = id
|
|
|
|
isExist, err := model2.FirstField(mSysUser.SysUser, []string{"id", "uuid"})
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
} else if !isExist {
|
|
return nil, errors.New("操作错误,用户信息不存在或已被删除")
|
|
}
|
|
mSysRole := model.NewSysRole()
|
|
|
|
out := make([]*model.SysRoleUserInfo, 0)
|
|
|
|
if out, err = mSysRole.UserRole(mSysUser.UUID); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return c.tree(mSysRole.SysRole, out, 0), nil
|
|
}
|
|
|
|
func (c *Role) Bind(id uint64, roleIDs []uint64) error {
|
|
mSysUser := model.NewSysUser()
|
|
mSysUser.ID = id
|
|
|
|
isExist, err := model2.FirstField(mSysUser.SysUser, []string{"id", "uuid"})
|
|
|
|
if err != nil {
|
|
return err
|
|
} else if !isExist {
|
|
return errors.New("操作错误,用户信息不存在或已被删除")
|
|
}
|
|
mSysUserRole := model.NewSysUserRole()
|
|
|
|
return orm.GetDB().Transaction(func(tx *gorm.DB) error {
|
|
if err = model2.DeleteWhere(mSysUserRole.SysUserRole, []*model2.ModelWhere{model2.NewWhere("uid", mSysUser.UUID)}, tx); 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: mSysUser.UUID, RoleID: v,
|
|
})
|
|
mark[v] = v
|
|
}
|
|
if len(roles) > 0 {
|
|
if err = model2.Creates(mSysUserRole.SysUserRole, roles, tx); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
})
|
|
}
|
|
|
|
func NewRole() RoleHandle {
|
|
return func(session *service.Session) *Role {
|
|
return &Role{session}
|
|
}
|
|
}
|