// 将所有 角色 加载到内存中;后台修改角色时,重新加载一次 func LoadRoles() error { roles, err := model.NewRole().FindAll() if err != nil { logger.Errorln("LoadRoles role read fail:", err) return err } if len(roles) == 0 { logger.Errorln("LoadRoles role read fail: num is 0") return errors.New("no role") } roleLocker.Lock() defer roleLocker.Unlock() maxRoleid := roles[len(roles)-1].Roleid Roles = make([]*model.Role, maxRoleid) // 由于角色不多,而且一般角色id是连续自增的,因此这里以角色id当slice的index for _, role := range roles { Roles[role.Roleid-1] = role } logger.Infoln("LoadRoles successfully!") return nil }
func DelRole(roleid string) error { err := model.NewRole().Where("roleid=" + roleid).Delete() model.NewRoleAuthority().Where("roleid=" + roleid).Delete() global.RoleChan <- struct{}{} global.RoleAuthChan <- struct{}{} return err }
func SaveRole(form url.Values, opUser string) (errMsg string, err error) { role := model.NewRole() role.Name = form.Get("name") role.OpUser = opUser roleid := form.Get("roleid") isNew := roleid == "" if isNew { role.Ctime = util.TimeNow() _, err = role.Insert() } else { role.Roleid, err = strconv.Atoi(roleid) if err != nil { errMsg = "roleid invalid" logger.Errorln(errMsg, ":", err) return } err = role.Persist(role) } if err != nil { errMsg = "内部服务器错误" logger.Errorln(errMsg, ":", err) return } roleAuth := model.NewRoleAuthority() if !isNew { // 如果是更新角色,将之前的角色权限都删除 roleAuth.Where("roleid=" + strconv.Itoa(role.Roleid)).Delete() } roleAuth.Roleid = role.Roleid roleAuth.OpUser = opUser // 增加角色拥有的权限 for _, aid := range form["authorities[]"] { aid, err := strconv.Atoi(aid) if err != nil { continue } roleAuth.Aid = aid roleAuth.Insert() } global.RoleChan <- struct{}{} global.RoleAuthChan <- struct{}{} return }
func FindRole(roleid string) *model.Role { if roleid == "" { return nil } role := model.NewRole() err := role.Where("roleid=" + roleid).Find() if err != nil { logger.Errorln("role FindRole error:", err) return nil } return role }
func FindRolesByPage(conds map[string]string, curPage, limit int) ([]*model.Role, int) { conditions := make([]string, 0, len(conds)) for k, v := range conds { conditions = append(conditions, k+"="+v) } role := model.NewRole() limitStr := strconv.Itoa((curPage-1)*limit) + "," + strconv.Itoa(limit) roles, err := role.Where(strings.Join(conditions, " AND ")).Limit(limitStr). FindAll() if err != nil { return nil, 0 } total, err := role.Count() if err != nil { return nil, 0 } return roles, total }