Переглянути джерело

1:get all the menu if the user is admin; 2: merge the utils; 3:add some fields the route need to entity; 3: redirect to login if the token is empty

huangrf 6 роки тому
батько
коміт
fc96fca499

+ 26 - 25
controllers/SystemController.go

@@ -26,7 +26,7 @@ func System_Login(c *SystemController) {
 	var logininfo sysmodel.LoginInfo
 	c.Ctx.BindJSON(&logininfo)
 	__none_func_system__(logininfo)
-	fmt.Println(logininfo)
+	//fmt.Println(logininfo)
 	var user sysmodel.SysUser
 	ret, err := c.Db.SQL(sysmodel.SqlUserLogin, logininfo.Account).Get(&user)
 	if ret && err == nil {
@@ -41,9 +41,10 @@ func System_Login(c *SystemController) {
 		}
 
 		token := &entitys.Token{}
-		if v := utils.GlobalTokenStore.Get(logininfo.Account + user.Domain); v == nil {
-			timestamp_str := strconv.FormatUint(timestamp, 10)
-			sec_tooken := utils.GenerateToken(logininfo.Account + timestamp_str)
+		timestamp_str := strconv.FormatUint(timestamp, 10)
+		sec_tooken := utils.GenerateToken(logininfo.Account + timestamp_str)
+
+		if v := utils.GetGlobalTokenStore().Get(sec_tooken); v == nil {
 			token.AccessToken = sec_tooken
 			token.RefreshToken = sec_tooken
 			token.LoginID = logininfo.Account
@@ -52,19 +53,18 @@ func System_Login(c *SystemController) {
 			//token.Password = pwd
 			token.ServerIp = ""
 			token.Domain = user.Domain
-			utils.GlobalTokenStore.Set(sec_tooken, token)
-
-			//设置session
-			//fmt.Println("----------set token ----------", token.AccessToken)
-			//session := sessions.Default(c.Ctx)
-			//session.Set("token", token.AccessToken)
-			//session.Save()
-
+			utils.GetGlobalTokenStore().Set(sec_tooken, token)
 		} else {
 			token = v
 		}
 
-		data := sysmodel.LoginReturnInfo{user.Id, user.LoginId, token.AccessToken,user.Type}
+		data := sysmodel.LoginReturnInfo{}
+		data.Userid = user.Id
+		data.Name = user.LoginId
+		data.Token = token.AccessToken
+		data.Type = user.Type
+		data.SysUserInfo = user
+		data.SysUserInfo.Password = ""
 		c.Ctx.JSON(200, sysmodel.SysReturn{200, "", data})
 	} else {
 		//fmt.Println(err.Error())
@@ -82,14 +82,9 @@ func System_Logout(c *SystemController) {
 
 	token := c.Ctx.GetHeader("token")
 	fmt.Println("delete token: ", token)
-	utils.GlobalTokenStore.Remove(token)
+	utils.GetGlobalTokenStore().Remove(token)
 
-	ret := __none_func_system__()
-	if ret {
-		c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
-	} else {
-		c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
-	}
+	c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
 }
 
 // _GetNavTree
@@ -99,20 +94,23 @@ func System_Logout(c *SystemController) {
 // @Success 200 {object} models.Account
 // @Failure 403 :id is empty
 func System_GetNavTree(c *SystemController) {
+	// set in the login_ware.go
 	user_id := c.Ctx.GetString("user_id")
 
-	ret := __none_func_system__(user_id)
 	var menus []sysmodel.SysMenuTree
-	c.Db.SQL(sysmodel.Selectall_nav_tree, user_id).Find(&menus)
+	if user_id == "187c50a4-caad-4557-80c8-aca81af9f370"{
+		c.Db.SQL(sysmodel.Selectall_nav_tree_admin).Find(&menus)
+	}else{
+		c.Db.SQL(sysmodel.Selectall_nav_tree, user_id).Find(&menus)
+	}
 
 	var menutree []sysmodel.SysMenuTree
 	finChildrenMenu(&menus, "", nil, &menutree)
 	for i := 0; i < len(menutree); i++ {
 		finChildrenMenu(&menus, menutree[i].Id, &menutree[i], &menutree)
 	}
-	if ret {
-		c.Ctx.JSON(200, sysmodel.SysReturn{200, "", menutree})
-	}
+	fmt.Println(menutree)
+	c.Ctx.JSON(200, sysmodel.SysReturn{200, "", menutree})
 }
 
 // _GetMenuTree
@@ -127,8 +125,11 @@ func System_GetMenuTree(c *SystemController) {
 	ret := __none_func_system__(user)
 	var menus []sysmodel.SysMenuTree
 	c.Db.SQL(sysmodel.Selectall_sys_menu).Find(&menus)
+
 	var menutree []sysmodel.SysMenuTree
 	finChildrenMenu(&menus, "", nil, &menutree)
+
+	fmt.Println(menutree)
 	for i := 0; i < len(menutree); i++ {
 		finChildrenMenu(&menus, menutree[i].Id, &menutree[i], &menutree)
 	}

+ 5 - 4
middleware/login_ware.go

@@ -1,7 +1,6 @@
 package middleware
 
 import (
-	"fmt"
 	sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
 	"git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
 	"github.com/gin-gonic/gin"
@@ -12,15 +11,17 @@ func LoginWare() gin.HandlerFunc {
 		//验证登陆
 		token := c.GetHeader("token")
 
-		fmt.Println("--LoginWare----token: ", token)
-
 		if token == "" {
 			c.AbortWithStatusJSON(401, sysmodel.SysReturn{401, "token is empty", ""})
+			c.Redirect(302, "/login")
+			return
 		}
 
-		tk := utils.GlobalTokenStore.Get(token)
+		tk := utils.GetGlobalTokenStore().Get(token)
 		if tk == nil {
 			c.AbortWithStatusJSON(401, sysmodel.SysReturn{401, "token Invalid", ""})
+			c.Redirect(302, "/login")
+			return
 		}
 
 		c.Set("token", tk)

+ 2 - 0
models/LoginReturnInfo_gen.go

@@ -9,4 +9,6 @@ type LoginReturnInfo struct {
 	Token string `json:"token"`
 	//用户类型
 	Type int32 `json:"type"`
+
+	SysUserInfo SysUser `json:"sys_user_info"`
 }

+ 20 - 18
models/Sql_SysMenu.go

@@ -61,24 +61,26 @@ WHERE
 
 //查找导航栏
 var Selectall_nav_tree = `
-SELECT sys_menu.*
+SELECT
+	DISTINCT sm.*
 FROM
-	sys_user
-LEFT JOIN
-	sys_user_role
-ON
-	sys_user.id = sys_user_role.user_id
-LEFT JOIN
-	sys_role_menu
-ON
-	sys_user_role.role_id = sys_role_menu.role_id
-LEFT JOIN
-	sys_menu
-ON
-	sys_menu.id = sys_role_menu.menu_id
+	sys_menu sm, sys_user_role sur, sys_role_menu srm
 WHERE
-	sys_user.id = ?
-	AND	sys_menu.type != 2 
-	GROUP BY sys_menu.id
-	ORDER BY sys_menu.order_num asc
+	sur.user_id = ?
+	AND sur.role_id = srm.role_id
+	AND srm.menu_id = sm.id
+	AND sm.del_flag = '0'
+ORDER BY
+	sm.order_num;
+`
+
+var Selectall_nav_tree_admin = `
+SELECT
+	DISTINCT sm.*
+FROM
+	sys_menu sm
+WHERE
+	sm.del_flag = '0'
+ORDER BY
+	sm.order_num;
 `

+ 2 - 1
models/SysMenuTree_gen.go

@@ -42,5 +42,6 @@ type SysMenuTree struct {
 	Level   int32 `json:"level"`
 	//父节点名称
 	ParentName   string `json:"parent_name"`
-
+	// 组件
+	Component string `json:"component"`
 }

+ 2 - 0
models/SysMenu_gen.go

@@ -17,6 +17,8 @@ type SysMenu struct {
 	Url   string    `xorm:"'url' varchar(200) notnull "json:"url"`
 	//授权(多个用逗号分隔,如:sys:user:add,sys:user:edit)
 	Perms   string    `xorm:"'perms' varchar(500) null "json:"perms"`
+	// 组件
+	Component string `xorm:"'component' varchar(36) null"json:"component"`
 	//类型 0:目录   1:菜单   2:按钮
 	Type   int32    `xorm:"'type' notnull "json:"type"`
 	//菜单图标

+ 2 - 6
routers/router_gen.go

@@ -6,16 +6,11 @@ import (
 	"git.qianqiusoft.com/qianqiusoft/light-apiengine/engine"
 	"git.qianqiusoft.com/qianqiusoft/light-apiengine/middleware"
 	"git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
-	"git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
 	"github.com/gin-gonic/gin"
 )
 
 var g_engine *engine.ApiEngine
 
-func init() {
-	utils.GlobalTokenStore = utils.NewTokenStore()
-}
-
 func sys_attachmentController_upload(c *gin.Context) {
 	controllers.NewSysAttachmentController(c, g_engine).Upload()
 }
@@ -166,7 +161,8 @@ func InitRouter(e *engine.ApiEngine) {
 	v1.Use(middleware.LoginWare())
 
 	v1.GET("/system/get_nav_tree", systemController_get_nav_tree)
-	v1.POST("/system/get_nav_tree", systemController_get_nav_tree)
+	v1.GET("/system/sidebar", systemController_get_nav_tree)
+	//v1.POST("/system/get_nav_tree", systemController_get_nav_tree)
 	//v1.PUT("/system/get_nav_tree",systemController_get_nav_tree)
 
 	v1.GET("/system/get_menu_tree", systemController_get_menu_tree)

+ 0 - 0
utils/storage.go → utils/filedb.go


+ 0 - 117
utils/other.go

@@ -1,117 +0,0 @@
-// Copyright (c) 2015 qianqiusoft.com
-// Licensed to You under the GNU Affero GPL v3
-// See the LICENSE file at git.qianqiusoft.com/qianqiusoft/light-vocation/LICENSE
-// http://www.gnu.org/licenses/why-affero-gpl.en.html
-
-package utils
-
-import (
-	"fmt"
-	"net/url"
-	"strings"
-
-	"git.qianqiusoft.com/qianqiusoft/light-apiengine/logs"
-)
-
-func SubString(str string, begin, length int) (substr string) {
-	//将字符串的转换成[]rune
-	rs := []rune(str)
-	lth := len(rs)
-	// 简单的越界判断
-	if begin < 0 {
-		begin = 0
-	}
-	if begin >= lth {
-		begin = lth
-	}
-	end := begin + length
-	if end > lth {
-		end = lth
-	}
-	// 返回子串
-	return string(rs[begin:end])
-}
-
-func FormatCamelString(str string) string {
-	res := ""
-	array := strings.Split(str, "_")
-	for _, val := range array {
-		if len(val) > 0 {
-			res += strings.ToUpper(SubString(val, 0, 1)) + strings.ToLower(SubString(val, 1, len(str)-1))
-		}
-	}
-	return res
-}
-
-func FormatFieldAndJsonString(columnName string) string {
-	return strings.ToLower(columnName)
-}
-
-func GetSizeOfColumn(size int) string {
-	//fmt.Printf(".............size is %d", size)
-	if size <= 0 {
-		return ""
-	} else {
-		ss := fmt.Sprintf("size(%d);", size)
-		//fmt.Println(ss)
-		return ss
-	}
-}
-
-func ConvertColTypeToDBType(colType string) string {
-	colType = strings.ToLower(colType)
-	switch colType {
-	case "string":
-		return "varchar"
-	case "text":
-		return "text"
-	case "datetime":
-		return "datetime"
-	default:
-		return colType
-	}
-}
-
-func ConvertColType(colType string) string {
-	colType = strings.ToLower(colType)
-	switch colType {
-	case "string-text":
-		return "string"
-	case "time.Time-date":
-		return "time.Time"
-	case "text":
-		return "string"
-	case "string":
-		return "string"
-	case "datetime":
-		return "time.Time"
-	default:
-		return colType
-	}
-}
-
-func TotalPage(record, size int) int {
-	tp := record / size
-	if tp < 0 {
-		return 1
-	}
-	if record%size == 0 {
-		return tp
-	}
-	return tp + 1
-}
-
-func FormatForBrowse(agent, val string) string {
-	if strings.Contains(strings.ToLower(agent), "safari/") && !strings.Contains(strings.ToLower(agent), "chrome/") {
-		logs.Debug("Safari浏览器编码")
-	} else if strings.Contains(strings.ToLower(agent), "firefox/") {
-		logs.Debug("Firefox浏览器编码")
-	} else if strings.Contains(strings.ToLower(agent), "chrome/") && strings.Contains(strings.ToLower(agent), "safari/") && !strings.Contains(strings.ToLower(agent), "edge/") {
-		logs.Debug("Chrome浏览器编码")
-	} else {
-		logs.Debug("IE浏览器编码")
-		val = url.QueryEscape(val)
-		val = strings.Replace(val, "+", "%20", -1)
-	}
-	return val
-}

+ 0 - 17
utils/token.go

@@ -1,17 +0,0 @@
-package utils
-
-import (
-	"crypto/hmac"
-	"crypto/sha1"
-	"encoding/hex"
-)
-
-const (
-	hmac_key = "hmac_key_"
-)
-
-func GenerateToken(plain string) string {
-	hash := hmac.New(sha1.New, []byte(hmac_key))
-	hash.Write([]byte(plain))
-	return hex.EncodeToString(hash.Sum(nil))
-}

+ 8 - 5
utils/store.go → utils/token_store.go

@@ -15,12 +15,15 @@ type TokenStore struct {
 	tokens map[string]*entitys.Token
 }
 
-var GlobalTokenStore *TokenStore
+var globalTokenStore *TokenStore = nil
 
-func NewTokenStore() *TokenStore {
-	t := &TokenStore{name: "sso", lock: new(sync.RWMutex), tokens: make(map[string]*entitys.Token)}
-	go t.startTokenCheckProcess()
-	return t
+func init(){
+	globalTokenStore = &TokenStore{name: "sso", lock: new(sync.RWMutex), tokens: make(map[string]*entitys.Token)}
+	go globalTokenStore.startTokenCheckProcess()
+}
+
+func GetGlobalTokenStore() *TokenStore {
+	return globalTokenStore
 }
 
 func (t *TokenStore) Get(key string) *entitys.Token {

+ 52 - 0
utils/utils.go

@@ -0,0 +1,52 @@
+package utils
+
+import (
+	"crypto/hmac"
+	"crypto/sha1"
+	"encoding/hex"
+	"git.qianqiusoft.com/qianqiusoft/go-uuid/uuid"
+	"git.qianqiusoft.com/qianqiusoft/light-apiengine/logs"
+	"net/url"
+	"strings"
+)
+
+const (
+	hmac_key = "hmac_key_"
+)
+
+func NewUUID() string {
+	//return uuid.NewV4().String()
+	return uuid.New()
+}
+
+func GenerateToken(plain string) string {
+	hash := hmac.New(sha1.New, []byte(hmac_key))
+	hash.Write([]byte(plain))
+	return hex.EncodeToString(hash.Sum(nil))
+}
+
+func TotalPage(record, size int) int {
+	tp := record / size
+	if tp < 0 {
+		return 1
+	}
+	if record%size == 0 {
+		return tp
+	}
+	return tp + 1
+}
+
+func FormatForBrowse(agent, val string) string {
+	if strings.Contains(strings.ToLower(agent), "safari/") && !strings.Contains(strings.ToLower(agent), "chrome/") {
+		logs.Debug("Safari浏览器编码")
+	} else if strings.Contains(strings.ToLower(agent), "firefox/") {
+		logs.Debug("Firefox浏览器编码")
+	} else if strings.Contains(strings.ToLower(agent), "chrome/") && strings.Contains(strings.ToLower(agent), "safari/") && !strings.Contains(strings.ToLower(agent), "edge/") {
+		logs.Debug("Chrome浏览器编码")
+	} else {
+		logs.Debug("IE浏览器编码")
+		val = url.QueryEscape(val)
+		val = strings.Replace(val, "+", "%20", -1)
+	}
+	return val
+}

+ 0 - 8
utils/uuid.go

@@ -1,8 +0,0 @@
-package utils
-
-import "git.qianqiusoft.com/qianqiusoft/go-uuid/uuid"
-
-func NewUUID() string {
-	//return uuid.NewV4().String()
-	return uuid.New()
-}