实现用户组功能

dev
Minho 2018-04-27 13:50:12 +08:00
parent 12e8e72d3a
commit bbe06db66f
11 changed files with 178 additions and 18 deletions

View File

@ -92,6 +92,7 @@ func RegisterModel() {
new(models.Label),
new(models.MemberGroup),
new(models.MemberGroupMembers),
new(models.Resource),
)
//migrate.RegisterMigration()
}

View File

@ -0,0 +1,8 @@
package controllers
type MemberGroupController struct {
ManagerController
}

View File

@ -0,0 +1,11 @@
package controllers
type ResourcesController struct {
ManagerController
}
func (c *ResourcesController) AddResource() {
c.Prepare()
c.TplName = "resources/AddResource.tpl"
}

View File

@ -257,10 +257,6 @@ func (m *MemberGroupMembers) FindMemberGroupMemberNoJoinSearchResult(groupId int

View File

@ -5,24 +5,28 @@ import (
"github.com/lifei6671/mindoc/conf"
"github.com/astaxie/beego/orm"
"github.com/astaxie/beego"
"strings"
"errors"
"strconv"
)
type MemberGroup struct {
GroupId int `orm:"column(group_id);pk;auto;unique;" json:"group_id"`
GroupName string `orm:"column(group_name);size(255);" json:"group_name"`
GroupNumber int `orm:"column(group_number);default(0)" json:"group_number"`
CreateTime time.Time `orm:"type(datetime);column(create_time);auto_now_add" json:"create_time"`
CreateAt int `orm:"type(int);column(create_at)" json:"create_at"`
CreateName string `orm:"-" json:"create_name"`
CreateRealName string `orm:"-" json:"create_real_name"`
ModifyTime time.Time `orm:"column(modify_time);type(datetime);auto_now" json:"modify_time"`
ModifyAt int `orm:"column(modify_at);type(int)" json:"-"`
ModifyName string `orm:"-" json:"modify_name"`
ModifyRealName string `orm:"-" json:"modify_real_name"`
GroupId int `orm:"column(group_id);pk;auto;unique;" json:"group_id"`
GroupName string `orm:"column(group_name);size(255);" json:"group_name"`
GroupNumber int `orm:"column(group_number);default(0)" json:"group_number"`
CreateTime time.Time `orm:"type(datetime);column(create_time);auto_now_add" json:"create_time"`
CreateAt int `orm:"type(int);column(create_at)" json:"create_at"`
CreateName string `orm:"-" json:"create_name"`
CreateRealName string `orm:"-" json:"create_real_name"`
ModifyTime time.Time `orm:"column(modify_time);type(datetime);auto_now" json:"modify_time"`
Resources string `orm:"column(resources);type(text);null" json:"-"`
IsDelete bool `orm:"column(is_delete);type(bool);default(false)" json:"is_delete"`
ResourceList []*Resource `orm:"-" json:"resource_list"`
ModifyAt int `orm:"column(modify_at);type(int)" json:"-"`
ModifyName string `orm:"-" json:"modify_name"`
ModifyRealName string `orm:"-" json:"modify_real_name"`
}
// TableName 获取对应数据库表名.
func (m *MemberGroup) TableName() string {
return "member_group"
@ -151,6 +155,14 @@ func (m *MemberGroup) FindByPager(pageIndex, pageSize int) ([]*MemberGroup,int,e
//添加或更新用户组信息
func (m *MemberGroup) InsertOrUpdate(cols...string) error {
o := orm.NewOrm()
if m.ResourceList != nil && len(m.ResourceList) > 0 {
for _,resource := range m.ResourceList {
m.Resources = m.Resources + strconv.Itoa(resource.ResourceId) + ","
}
m.Resources = strings.Trim(m.Resources,",")
}
var err error
if m.GroupId > 0 {
_,err = o.Update(m, cols...)
@ -181,11 +193,13 @@ func (m *MemberGroup) ResetMemberGroupNumber(groupId int) error {
return nil
}
//判断用户组是否存在
func (m *MemberGroup) Exist(groupId int) bool {
o := orm.NewOrm()
return o.QueryTable(m.TableNameWithPrefix()).Filter("group_id",groupId).Exist()
}
//模糊查询用户组列表
func (m *MemberGroup) FindMemberGroupList(keyword string) ([]*MemberGroup,error) {
o := orm.NewOrm()
var memberGroups []*MemberGroup
@ -194,6 +208,34 @@ func (m *MemberGroup) FindMemberGroupList(keyword string) ([]*MemberGroup,error)
return memberGroups,err
}
//查询指定用户组的资源列表
func (m *MemberGroupMembers) FindMemberGroupResourceList(groupId int) ([]*Resource,error) {
o := orm.NewOrm()
var memberGroup *MemberGroup
err := o.QueryTable(m.TableNameWithPrefix()).Filter("group_id",groupId).One(memberGroup)
if err != nil {
beego.Error("查询用户组资源时出错 =>", err)
return nil,err
}
if memberGroup.Resources != "" {
resourceIds := strings.Split(strings.Trim(memberGroup.Resources,","),",")
var resources []*Resource
_,err = o.QueryTable(NewResource().TableNameWithPrefix()).Filter("resource_id__in",resourceIds).All(resources)
if err != nil {
beego.Error("查询用户组资源时出错 =>", err)
}
return resources,err
}
return nil,errors.New("当前用户组未设置资源")
}

View File

@ -0,0 +1,97 @@
package models
import (
"github.com/lifei6671/mindoc/conf"
"github.com/astaxie/beego/orm"
"errors"
"github.com/astaxie/beego"
)
type Resource struct {
//主键
ResourceId int `orm:"column(resource_id);pk;auto;unique;" json:"resource_id"`
//分组ID
ResourceGroupId int `orm:"column(resource_group_id);index" json:"resource_group_id"`
//分组名称
ResourceGroupName string `orm:"-" json:"resource_group_name"`
//资源名称
ResourceName string `orm:"column(resource_name);size(255)" json:"resource_name"`
ControllerName string `orm:"column(controller_name);size(255)" json:"controller_name"`
ActionName string `orm:"column(action_name);size(255)" json:"action_name"`
HttpMethod string `orm:"column(http_method);size(50)" json:"http_method"`
}
// TableName 获取对应数据库表名.
func (m *Resource) TableName() string {
return "resource"
}
// TableEngine 获取数据使用的引擎.
func (m *Resource) TableEngine() string {
return "INNODB"
}
// 多字段唯一键
func (m *Resource) TableUnique() [][]string {
return [][]string{{"resource_group_id", "resource_name","action_name","http_method"}}
}
func (m *Resource) TableNameWithPrefix() string {
return conf.GetDatabasePrefix() + m.TableName()
}
func NewResource() *Resource {
return &Resource{}
}
//添加或更新资源
func (m *Resource) InsertOrUpdate(cols ...string) (err error) {
if m.ControllerName == "" || m.ActionName == "" || m.ResourceGroupId <= 0 || m.ResourceName == ""{
return errors.New("参数错误")
}
if m.HttpMethod == "" {
m.HttpMethod = "GET"
}
o := orm.NewOrm()
if m.ResourceId > 0 {
_,err = o.Update(m,cols...)
}else{
_,err = o.Insert(m)
}
if err != nil {
beego.Error("添加或更新资源时出错 =>",err)
}
return
}
//删除资源
func (m *Resource) Delete(resourceId int) (err error) {
o := orm.NewOrm()
_,err = o.QueryTable(m.TableNameWithPrefix()).Filter("resource_id",resourceId).Delete()
if err != nil {
beego.Error("删除资源时出错 =>",resourceId,err)
}
return
}

View File

@ -15,6 +15,7 @@ func init() {
beego.Router("/valid_email", &controllers.AccountController{}, "post:ValidEmail")
beego.Router("/captcha", &controllers.AccountController{}, "*:Captcha")
//超级管理员管理
beego.Router("/manager", &controllers.ManagerController{}, "*:Index")
beego.Router("/manager/users", &controllers.ManagerController{}, "*:Users")
beego.Router("/manager/users/edit/:id", &controllers.ManagerController{}, "*:EditMember")
@ -43,6 +44,9 @@ func init() {
beego.Router("/manager/user_group_member/search", &controllers.ManagerController{},"*:MemberGroupMemberSearch")
beego.Router("/manager/user_group_member/list/:id:int", &controllers.ManagerController{},"*:MemberGroupMemberList")
//权限资源管理
beego.Router("/resource/add", &controllers.ResourcesController{},"*:AddResource")
beego.Router("/setting", &controllers.SettingController{}, "*:Index")
beego.Router("/setting/password", &controllers.SettingController{}, "*:Password")
beego.Router("/setting/upload", &controllers.SettingController{}, "*:Upload")

View File

@ -188,7 +188,7 @@
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title">导入项目</h4>
<h4 class="modal-title">导入项目 <a href="https://github.com/lifei6671/mindoc/wiki/MinDoc%E9%A1%B9%E7%9B%AE%E5%AF%BC%E5%85%A5%E5%8A%9F%E8%83%BD%E7%AE%80%E4%BB%8B" target="_blank" title="导入帮助">?</a> </h4>
</div>
<div class="modal-body">
<div class="form-group">

View File

View File

@ -1,6 +1,7 @@
<li{{if eq .ActionName "Index"}} class="active"{{end}}><a href="{{urlfor "ManagerController.Index"}}" class="item"><i class="fa fa-dashboard" aria-hidden="true"></i> 仪表盘</a> </li>
<li{{if eq .ActionName "Users" "CreateMember" "EditMember"}} class="active"{{end}}><a href="{{urlfor "ManagerController.Users" }}" class="item"><i class="fa fa-user" aria-hidden="true"></i> 用户管理</a> </li>
<li{{if eq .ActionName "MemberGroupList" "MemberGroupEdit" "MemberGroupMemberList"}} class="active"{{end}}><a href="{{urlfor "ManagerController.MemberGroupList" }}" class="item"><i class="fa fa-users" aria-hidden="true"></i> 用户组管理</a> </li>
<li{{if eq .ActionName "AddResource"}} class="active"{{end}}><a href="{{urlfor "ResourcesController.AddResource" }}" class="item"><i class="fa fa-universal-access" aria-hidden="true"></i> 资源管理</a> </li>
<li{{if eq .ActionName "Books" "EditBook"}} class="active"{{end}}><a href="{{urlfor "ManagerController.Books" }}" class="item"><i class="fa fa-book" aria-hidden="true"></i> 项目管理</a> </li>
{{/*<li><a href="{{urlfor "ManagerController.Comments" }}" class="item"><i class="fa fa-comments-o" aria-hidden="true"></i> </a> </li>*/}}
<li{{if eq .ActionName "Setting"}} class="active"{{end}}><a href="{{urlfor "ManagerController.Setting" }}" class="item"><i class="fa fa-cogs" aria-hidden="true"></i> 配置管理</a> </li>

View File