1
0
Minho 7 жил өмнө
parent
commit
bbe06db66f

+ 1 - 0
commands/command.go

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

+ 8 - 0
controllers/MemberGroupController.go

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

+ 11 - 0
controllers/ResourcesController.go

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

+ 0 - 4
models/MemberGroupMemberModel.go

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

+ 55 - 13
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("当前用户组未设置资源")
+}
+
+
+
 
 
 

+ 97 - 0
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
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 4 - 0
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")

+ 1 - 1
views/book/index.tpl

@@ -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">

+ 0 - 0
views/manager/AddResource.tpl


+ 1 - 0
views/manager/manager_widgets.tpl.tpl

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

+ 0 - 0
views/resources/AddResource.tpl