Pārlūkot izejas kodu

根据角色权限获取菜单

huangyh 6 gadi atpakaļ
vecāks
revīzija
8d998e9aa8

+ 55 - 11
controllers/partial/SystemController.go

@@ -18,7 +18,35 @@ import (
 // @Success 200 {object} Account
 // @Failure 403 :id is empty
 func System_Sidebar(c *entitys.CtrlContext) {
-	System_GetMenuTree(c)
+	//System_GetMenuTree(c)
+	_type := c.Ctx.DefaultQuery("type", "")
+	type_op := c.Ctx.DefaultQuery("type_op", "")
+	hidden := c.Ctx.DefaultQuery("hidden", "")
+	name := c.Ctx.DefaultQuery("name", "")
+	cn_id := c.Ctx.DefaultQuery("cn_id", "")
+
+	tk, _ := c.Ctx.Get("token")
+	user := tk.(*entitys.Token)
+
+	op := template.HTML(type_op)
+
+	// 管理员角色ID 5c38ee66-c5e6-40a7-b190-86d115bae3e5
+	exist, _ := c.Db.Table("sys_user_role").Where("user_id = ? and role_id = ?", user.UserId, "5c38ee66-c5e6-40a7-b190-86d115bae3e5").Exist()
+	//如果是管理员
+	var paramMap_i_t map[string]interface{}
+	if exist {
+		paramMap_i_t = map[string]interface{}{"user_id": "", "name": name, "cn_id": cn_id, "sort": "name", "type": _type, "type_op": op, "hidden": hidden}
+	} else {
+		paramMap_i_t = map[string]interface{}{"user_id": user.UserId, "name": name, "cn_id": cn_id, "sort": "name", "type": _type, "type_op": op, "hidden": hidden}
+	}
+
+	result, err := sysutils.TreeSearch(c.Db, "system", "get_menu_tree", "sys_menu", paramMap_i_t)
+
+	if err == nil {
+		c.Ctx.JSON(200, sysmodel.SysReturn{200, "", result})
+	} else {
+		c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
+	}
 }
 
 // _GetMenuTree
@@ -36,7 +64,7 @@ func System_GetMenuTree(c *entitys.CtrlContext) {
 
 	op := template.HTML(type_op)
 
-	paramMap_i_t := map[string]interface{}{"name": name, "cn_id": cn_id, "sort": "name", "type": _type, "type_op": op, "hidden": hidden}
+	paramMap_i_t := map[string]interface{}{"user_id": "", "name": name, "cn_id": cn_id, "sort": "name", "type": _type, "type_op": op, "hidden": hidden}
 	result, err := sysutils.TreeSearch(c.Db, "system", "get_menu_tree", "sys_menu", paramMap_i_t)
 
 	if err == nil {
@@ -163,6 +191,8 @@ func System_FindOrgPage(c *entitys.CtrlContext) {
 // @Success 200 {object} Account
 // @Failure 403 :id is empty
 func System_AddUser(c *entitys.CtrlContext) {
+	tk, _ := c.Ctx.Get("token")
+	opUser := tk.(*entitys.Token)
 	var user sysmodel.SysUser
 	err := c.Ctx.BindJSON(&user)
 	if err != nil {
@@ -193,13 +223,18 @@ func System_AddUser(c *entitys.CtrlContext) {
 	user.CreateBy = user_id
 	user.LastUpdateBy = user_id
 	user.DelFlag = 0
+	user.Domain = opUser.Domain
 	user.Password = sysutils.HashPassword(user.Password, "")
+	_, err = c.PlatformDbEngine.Insert(&user)
+	if err != nil {
+		c.Ctx.JSON(200, sysmodel.SysReturn{500, "平台插入用户错误:" + err.Error(), nil})
+	}
 	_, err = c.Db.Insert(&user)
 	ret := __none_func_system__(user.LoginId, user.Password, user.OrgId, user.Email)
 	if ret && err == nil {
 		c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
 	} else {
-		c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
+		c.Ctx.JSON(200, sysmodel.SysReturn{500, "域数据库插入用户错误:" + err.Error(), nil})
 	}
 }
 
@@ -235,11 +270,12 @@ func System_DelUser(c *entitys.CtrlContext) {
 		return
 	}
 	session.Commit()
-	ret := __none_func_system__()
-	if ret {
+	_, err = c.PlatformDbEngine.In("id", ids).Update(map[string]interface{}{"del_flag": 1})
+
+	if err == nil {
 		c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
 	} else {
-		c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
+		c.Ctx.JSON(200, sysmodel.SysReturn{500, "平台删除用户失败:" + err.Error(), nil})
 	}
 }
 
@@ -267,21 +303,29 @@ func System_UpdateUser(c *entitys.CtrlContext) {
 		return
 	}
 
-	postData.LastUpdateTime = time.Now().UnixNano()
-	postData.LastUpdateBy = user.UserId
+	//postData.LastUpdateTime = time.Now().UnixNano()
+	//postData.LastUpdateBy = user.UserId
 
 	session := c.Db.NewSession()
 	defer session.Close()
 	session.Begin()
 
-	paramMap, _ := sysutils.BeanToMap(&postData)
-	_, err = session.SqlMapClient("update_sys_user", paramMap).Execute()
+	//paramMap, _ := sysutils.BeanToMap(&postData)
+	paramMap := map[string]interface{}{"id": postData.Id, "name": postData.Name, "email": postData.Email, "mobile": postData.Mobile, "org_id": postData.OrgId, "last_update_time": time.Now().UnixNano(), "last_update_by": user.UserId}
+	_, err = session.SqlMapClient("update_user", &paramMap).Execute()
 	if err != nil {
 		session.Rollback()
 		c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
 		return
 	}
 
+	_, err = c.PlatformDbEngine.SqlMapClient("update_user", &paramMap).Execute()
+	if err != nil {
+		session.Rollback()
+		c.Ctx.JSON(500, sysmodel.SysReturn{500, "平台更新用户失败:" + err.Error(), nil})
+		return
+	}
+
 	userRoles := []sysmodel.SysUserRole{}
 	for _, roleId := range postData.UserRole {
 		userRole := sysmodel.SysUserRole{}
@@ -1073,7 +1117,7 @@ func System_GetRoleMenuTree(c *entitys.CtrlContext) {
 	//sysTree, err := sysutils.BuildTree("", sysMenu)
 
 	op := template.HTML(">=")
-	paramMap := map[string]interface{}{"sort": "name", "type": 0, "type_op": op, "hidden": 0}
+	paramMap := map[string]interface{}{"user_id": "", "sort": "name", "type": 0, "type_op": op, "hidden": 0}
 	sysTree, err := sysutils.TreeSearch(c.Db, "system", "get_menu_tree", "sys_menu", paramMap)
 	if err != nil {
 		c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})

+ 22 - 22
engine/apiengine.go

@@ -6,33 +6,33 @@ import (
 	//"github.com/gin-contrib/sessions/memstore"
 	//"github.com/gin-contrib/sessions/cookie"
 
-	"os"
 	"git.qianqiusoft.com/qianqiusoft/light-apiengine-client/client"
 	"git.qianqiusoft.com/qianqiusoft/light-apiengine/config"
-	"git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
+	"git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
 	"git.qianqiusoft.com/qianqiusoft/light-apiengine/env"
 	"git.qianqiusoft.com/qianqiusoft/light-apiengine/logs"
+	"git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
 	"github.com/gin-contrib/cors"
+	"github.com/gin-contrib/gzip"
 	"github.com/gin-gonic/gin"
 	"github.com/xormplus/xorm"
-	"git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
-	"github.com/gin-contrib/gzip"
+	"os"
 )
 
 type ApiEngine struct {
 	entitys.ApiEngineInterface
-	PlatformOrmEngine   *xorm.Engine
-	BusinessOrmEngine 	map[string]*xorm.Engine
-	GinEngine   		*gin.Engine
-	Listen_addr 		string
-	AppModuleInitFunc   map[string]entitys.AppModuleInitFunction
+	PlatformOrmEngine *xorm.Engine
+	BusinessOrmEngine map[string]*xorm.Engine
+	GinEngine         *gin.Engine
+	Listen_addr       string
+	AppModuleInitFunc map[string]entitys.AppModuleInitFunction
 }
 
-func (g* ApiEngine)GetBusinessDb(domain string) *xorm.Engine{
+func (g *ApiEngine) GetBusinessDb(domain string) *xorm.Engine {
 	return g.BusinessOrmEngine[domain]
 }
 
-func (g* ApiEngine)GetAllBusinessDb() map[string]*xorm.Engine{
+func (g *ApiEngine) GetAllBusinessDb() map[string]*xorm.Engine {
 	return g.BusinessOrmEngine
 }
 
@@ -48,8 +48,9 @@ func NewApiEngine(driverName, dataSourceName string, addr string) *ApiEngine {
 	engine.PlatformOrmEngine, err = xorm.NewEngine(driverName, dataSourceName)
 	printError(err)
 
+	initOrmEngine(engine.PlatformOrmEngine, driverName)
 	if config.AppConfig.SyncDb {
-		initOrmEngine(engine.PlatformOrmEngine, driverName)
+
 		initPlatformDbData(engine.PlatformOrmEngine)
 	}
 	engine.GinEngine = gin.Default()
@@ -79,17 +80,17 @@ func NewApiEngine(driverName, dataSourceName string, addr string) *ApiEngine {
 	return engine
 }
 
-func (g *ApiEngine)AppModuleInit(domain string)  {
-	for _,v := range g.AppModuleInitFunc {
+func (g *ApiEngine) AppModuleInit(domain string) {
+	for _, v := range g.AppModuleInitFunc {
 		v(domain, g)
 	}
 }
 
-func (g *ApiEngine)AddAppMoudleInitFunc(module_name string, handler entitys.AppModuleInitFunction){
+func (g *ApiEngine) AddAppMoudleInitFunc(module_name string, handler entitys.AppModuleInitFunction) {
 	g.AppModuleInitFunc[module_name] = handler
 }
 
-func (g *ApiEngine)AddBusinessDb(domainid, login_id, domain, datasource string, sync_db bool) bool{
+func (g *ApiEngine) AddBusinessDb(domainid, login_id, domain, datasource string, sync_db bool) bool {
 	db := g.BusinessOrmEngine[domain]
 	if db == nil {
 		db, _ = xorm.NewEngine("mysql", datasource)
@@ -107,26 +108,25 @@ func (g *ApiEngine)AddBusinessDb(domainid, login_id, domain, datasource string,
 	return false
 }
 
-func (g *ApiEngine)LoadBusinessOrm()  {
+func (g *ApiEngine) LoadBusinessOrm() {
 	var domain []models.SysDomain
 	g.PlatformOrmEngine.SQL("select * from sys_domain where del_flag = 0").Find(&domain)
 	g.BusinessOrmEngine = make(map[string]*xorm.Engine)
-	for _,v := range domain {
+	for _, v := range domain {
 		g.AddBusinessDb(v.Id, v.Domain, v.Domain, v.DataSource, (v.SyncFlag == 0))
 	}
 	//将platformOrm添加到businessOrm中,这样平台账号登录上去也相当于使用相同的数据库配置
 	g.BusinessOrmEngine["qianqiuiot.com"] = g.PlatformOrmEngine
 }
 
-
 func (g *ApiEngine) Run() {
 	if config.AppConfig.RunMode != "release" {
 		engine_path := env.Get("GOPATH", "") + "/src/git.qianqiusoft.com/qianqiusoft/light-apiengine/"
-		_,err:=os.Stat(engine_path+"/light-apiengine.xml")
-		if err == nil{
+		_, err := os.Stat(engine_path + "/light-apiengine.xml")
+		if err == nil {
 			gen_clinet := client.NewEngineClient("light-apiengine", "http://ccbeetech.com:6166")
 			gen_clinet.GenerateToPath(engine_path+"/light-apiengine.xml", engine_path)
-		}else{
+		} else {
 			logs.Error("light-engine.xml文件不存在")
 		}
 	}

+ 0 - 1
light-apiengine.xml

@@ -370,7 +370,6 @@
             <column name="type" caption="组织类型" type="int32"/>
             <column name="order" caption="排序" type="int32"/>
             <column name="status" caption="状态 0:禁用   1:正常" type="int32"/>
-            <column isNull="false" name="domain" caption="域" type="string" size="50" dbtype="varchar(36)"/>
             <column isNull="false" name="create_by" caption="创建人" type="string" size="36" dbtype="varchar(36)"/>
             <column isNull="false" name="create_time" caption="创建时间" type="local_time" />
             <column isNull="false" name="last_update_by" caption="最后更新人" type="string" size="36" dbtype="varchar(36)"/>

+ 4 - 9
models/SysOrgTree_gen.go

@@ -1,13 +1,11 @@
-
 package models
+
 import (
 //__import_packages__
 )
 
-
-
 type SysOrgTree struct {
-		//主键
+	//主键
 	Id string `json:"id"`
 	//上级组织
 	Parent string `json:"parent"`
@@ -25,8 +23,6 @@ type SysOrgTree struct {
 	Order int32 `json:"order"`
 	//状态 0:禁用   1:正常
 	Status int32 `json:"status"`
-	//域
-	Domain string `json:"domain"`
 	//创建人
 	CreateBy string `json:"create_by"`
 	//创建时间
@@ -39,10 +35,9 @@ type SysOrgTree struct {
 	DelFlag int32 `json:"del_flag"`
 
 	//子列表
-	Children   []SysOrgTree `json:"children"`
-
+	Children []SysOrgTree `json:"children"`
 }
 
 func init() {
-    AddTableName("sys_org_tree")
+	AddTableName("sys_org_tree")
 }

+ 17 - 20
models/SysOrg_gen.go

@@ -1,41 +1,38 @@
-
 package models
+
 import (
-	//__import_packages__
+//__import_packages__
 )
 
 type SysOrg struct {
 	//主键
-	Id   string    `xorm:"'id' varchar(36) pk notnull "json:"id"`
+	Id string `xorm:"'id' varchar(36) pk notnull "json:"id"`
 	//上级组织
-	Parent   string    `xorm:"'parent' varchar(36) null "json:"parent"`
+	Parent string `xorm:"'parent' varchar(36) null "json:"parent"`
 	//继承关系
-	Inheritance   string    `xorm:"'inheritance' varchar(500) null "json:"inheritance"`
+	Inheritance string `xorm:"'inheritance' varchar(500) null "json:"inheritance"`
 	//名称
-	Name   string    `xorm:"'name' varchar(36) notnull "json:"name"`
+	Name string `xorm:"'name' varchar(36) notnull "json:"name"`
 	//全名
-	FullName   string    `xorm:"'full_name' varchar(36) notnull "json:"full_name"`
+	FullName string `xorm:"'full_name' varchar(36) notnull "json:"full_name"`
 	//领导人
-	Leader   string    `xorm:"'leader' varchar(36) notnull "json:"leader"`
+	Leader string `xorm:"'leader' varchar(36) notnull "json:"leader"`
 	//组织类型
-	Type   int32    `xorm:"'type' notnull "json:"type"`
+	Type int32 `xorm:"'type' notnull "json:"type"`
 	//排序
-	Order   int32    `xorm:"'order' notnull "json:"order"`
+	Order int32 `xorm:"'order' notnull "json:"order"`
 	//状态 0:禁用   1:正常
-	Status   int32    `xorm:"'status' notnull "json:"status"`
-	//域
-	Domain   string    `xorm:"'domain' varchar(36) notnull "json:"domain"`
+	Status int32 `xorm:"'status' notnull "json:"status"`
 	//创建人
-	CreateBy   string    `xorm:"'create_by' varchar(36) notnull "json:"create_by"`
+	CreateBy string `xorm:"'create_by' varchar(36) notnull "json:"create_by"`
 	//创建时间
-	CreateTime   LocalTime    `xorm:"'create_time' notnull "json:"create_time"`
+	CreateTime LocalTime `xorm:"'create_time' notnull "json:"create_time"`
 	//最后更新人
-	LastUpdateBy   string    `xorm:"'last_update_by' varchar(36) notnull "json:"last_update_by"`
+	LastUpdateBy string `xorm:"'last_update_by' varchar(36) notnull "json:"last_update_by"`
 	//最后更新时间
-	LastUpdateTime   int64    `xorm:"'last_update_time' notnull "json:"last_update_time"`
+	LastUpdateTime int64 `xorm:"'last_update_time' notnull "json:"last_update_time"`
 	//是否删除 1:删除   0:正常
-	DelFlag   int32    `xorm:"'del_flag' notnull "json:"del_flag"`
-
+	DelFlag int32 `xorm:"'del_flag' notnull "json:"del_flag"`
 }
 
 func (t *SysOrg) TableName() string {
@@ -43,6 +40,6 @@ func (t *SysOrg) TableName() string {
 }
 
 func init() {
-    AddTableName("sys_org")
+	AddTableName("sys_org")
 	RegisterModel(new(SysOrg))
 }

+ 5 - 5
sqlconfig/light-apiengine/sys_org_gen.xml

@@ -2,13 +2,13 @@
 <sqlMap>
     <sql id="insert_sys_org">
         insert into sys_org
-		(`id`,`parent`,`inheritance`,`name`,`full_name`,`leader`,`type`,`order`,`status`,`domain`,`create_by`,`create_time`,`last_update_by`,`last_update_time`,`del_flag`)
+		(`id`,`parent`,`inheritance`,`name`,`full_name`,`leader`,`type`,`order`,`status`,`create_by`,`create_time`,`last_update_by`,`last_update_time`,`del_flag`)
 		values
-		(?id,?parent,?inheritance,?name,?full_name,?leader,?type,?order,?status,?domain,?create_by,?create_time,?last_update_by,?last_update_time,?del_flag)
+		(?id,?parent,?inheritance,?name,?full_name,?leader,?type,?order,?status,?create_by,?create_time,?last_update_by,?last_update_time,?del_flag)
     </sql>
     <sql id="update_sys_org">
         update sys_org set
-		`parent` = ?parent,`inheritance` = ?inheritance,`name` = ?name,`full_name` = ?full_name,`leader` = ?leader,`type` = ?type,`order` = ?order,`status` = ?status,`domain` = ?domain,`create_by` = ?create_by,`create_time` = ?create_time,`last_update_by` = ?last_update_by,`last_update_time` = ?last_update_time,`del_flag` = ?del_flag
+		`parent` = ?parent,`inheritance` = ?inheritance,`name` = ?name,`full_name` = ?full_name,`leader` = ?leader,`type` = ?type,`order` = ?order,`status` = ?status,`create_by` = ?create_by,`create_time` = ?create_time,`last_update_by` = ?last_update_by,`last_update_time` = ?last_update_time,`del_flag` = ?del_flag
 		where id = ?id
     </sql>
     <sql id="deleteone_sys_org">
@@ -17,13 +17,13 @@
     </sql>
     <sql id="selectone_sys_org">
         select 
-			`id`,`parent`,`inheritance`,`name`,`full_name`,`leader`,`type`,`order`,`status`,`domain`,`create_by`,`create_time`,`last_update_by`,`last_update_time`,`del_flag`
+			`id`,`parent`,`inheritance`,`name`,`full_name`,`leader`,`type`,`order`,`status`,`create_by`,`create_time`,`last_update_by`,`last_update_time`,`del_flag`
         from sys_org
 		where id = ?id
     </sql>
     <sql id="selectall_sys_org">
         select 
-			`id`,`parent`,`inheritance`,`name`,`full_name`,`leader`,`type`,`order`,`status`,`domain`,`create_by`,`create_time`,`last_update_by`,`last_update_time`,`del_flag`
+			`id`,`parent`,`inheritance`,`name`,`full_name`,`leader`,`type`,`order`,`status`,`create_by`,`create_time`,`last_update_by`,`last_update_time`,`del_flag`
         from sys_org
     </sql>
 </sqlMap>

+ 25 - 6
sqlconfig/system_controller/system_get_menu_tree.tpl

@@ -1,14 +1,33 @@
-
+{{if ne .user_id ""}}
 select
-    *
+    sys_menu.*
+from
+    sys_menu, sys_role_menu, sys_user_role, sys_user
+where
+    sys_menu.id = sys_role_menu.menu_id
+    and sys_role_menu.role_id = sys_user_role.role_id
+    and sys_user_role.user_id = sys_user.id
+    and sys_menu.del_flag = 0
+    and sys_user.id = '{{.user_id}}'
+{{if ne .name ""}}
+    and sys_menu.name like '%{{.name}}%'
+{{end}}
+{{if ne .type_op ""}}
+    and sys_menu.type {{.type_op }} {{.type}}
+{{end}}
+order by sys_menu.order_num
+{{else}}
+select
+    sys_menu.*
 from
     sys_menu
 where
-    del_flag = 0
+    sys_menu.del_flag = 0
 {{if ne .name ""}}
-    and name like '%{{.name}}%'
+    and sys_menu.name like '%{{.name}}%'
 {{end}}
 {{if ne .type_op ""}}
-    and type {{.type_op }} {{.type}}
+    and sys_menu.type {{.type_op }} {{.type}}
+{{end}}
+order by sys_menu.order_num
 {{end}}
-order by order_num