mirror of https://github.com/mindoc-org/mindoc.git
实现用户组功能
parent
12e8e72d3a
commit
bbe06db66f
|
@ -92,6 +92,7 @@ func RegisterModel() {
|
|||
new(models.Label),
|
||||
new(models.MemberGroup),
|
||||
new(models.MemberGroupMembers),
|
||||
new(models.Resource),
|
||||
)
|
||||
//migrate.RegisterMigration()
|
||||
}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
package controllers
|
||||
|
||||
|
||||
type MemberGroupController struct {
|
||||
ManagerController
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
package controllers
|
||||
|
||||
type ResourcesController struct {
|
||||
ManagerController
|
||||
}
|
||||
|
||||
func (c *ResourcesController) AddResource() {
|
||||
c.Prepare()
|
||||
c.TplName = "resources/AddResource.tpl"
|
||||
|
||||
}
|
|
@ -257,10 +257,6 @@ func (m *MemberGroupMembers) FindMemberGroupMemberNoJoinSearchResult(groupId int
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -5,6 +5,9 @@ import (
|
|||
"github.com/lifei6671/mindoc/conf"
|
||||
"github.com/astaxie/beego/orm"
|
||||
"github.com/astaxie/beego"
|
||||
"strings"
|
||||
"errors"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type MemberGroup struct {
|
||||
|
@ -16,13 +19,14 @@ type MemberGroup struct {
|
|||
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("当前用户组未设置资源")
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -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")
|
||||
|
|
|
@ -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">×</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">
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue