Files
2021-11-19 11:53:20 +08:00

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}
}
}