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