diff --git a/commands/command.go b/commands/command.go index 5926f918..e95e8cf3 100644 --- a/commands/command.go +++ b/commands/command.go @@ -92,6 +92,7 @@ func RegisterModel() { new(models.Label), new(models.MemberGroup), new(models.MemberGroupMembers), + new(models.Resource), ) //migrate.RegisterMigration() } diff --git a/controllers/MemberGroupController.go b/controllers/MemberGroupController.go new file mode 100644 index 00000000..12113da2 --- /dev/null +++ b/controllers/MemberGroupController.go @@ -0,0 +1,8 @@ +package controllers + + +type MemberGroupController struct { + ManagerController +} + + diff --git a/controllers/ResourcesController.go b/controllers/ResourcesController.go new file mode 100644 index 00000000..602477ca --- /dev/null +++ b/controllers/ResourcesController.go @@ -0,0 +1,11 @@ +package controllers + +type ResourcesController struct { + ManagerController +} + +func (c *ResourcesController) AddResource() { + c.Prepare() + c.TplName = "resources/AddResource.tpl" + +} \ No newline at end of file diff --git a/models/MemberGroupMemberModel.go b/models/MemberGroupMemberModel.go index 28262c79..34cc4ff1 100644 --- a/models/MemberGroupMemberModel.go +++ b/models/MemberGroupMemberModel.go @@ -257,10 +257,6 @@ func (m *MemberGroupMembers) FindMemberGroupMemberNoJoinSearchResult(groupId int - - - - diff --git a/models/MemberGroupModel.go b/models/MemberGroupModel.go index a1523464..07f68ac2 100644 --- a/models/MemberGroupModel.go +++ b/models/MemberGroupModel.go @@ -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("当前用户组未设置资源") +} + + + diff --git a/models/ResourceModel.go b/models/ResourceModel.go new file mode 100644 index 00000000..e391275e --- /dev/null +++ b/models/ResourceModel.go @@ -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 +} + + + + + + + + + + + + + + + + + + + + + diff --git a/routers/router.go b/routers/router.go index 7cc77352..f01bb08a 100644 --- a/routers/router.go +++ b/routers/router.go @@ -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") diff --git a/views/book/index.tpl b/views/book/index.tpl index e9ab00b3..61ac1cb9 100644 --- a/views/book/index.tpl +++ b/views/book/index.tpl @@ -188,7 +188,7 @@