Quellcode durchsuchen

token menu 修改

terry vor 3 Jahren
Ursprung
Commit
a449c2c78f

+ 9 - 5
app/middleware/checkAuth.go

@@ -5,10 +5,14 @@ import (
 )
 
 func CheckAuth() gin.HandlerFunc {
-	return func(context *gin.Context) {
-		// TODO...
-
-		// 前置中间件
-		context.Next()
+	return func(ctx *gin.Context) {
+		authorization := ctx.GetHeader(Authorization)
+		if authorization != "" {
+			token := parseAccessToken(authorization)
+			if token != nil {
+				ctx.Set(Authorization, token)
+			}
+		}
+		ctx.Next()
 	}
 }

+ 0 - 13
app/middleware/cros.go

@@ -8,19 +8,6 @@ import (
 // 处理跨域请求,支持options访问
 func Cors() gin.HandlerFunc {
 	return func(c *gin.Context) {
-		origin := c.GetHeader("Origin")
-		if len(origin) == 0 {
-			c.Next()
-			return
-		}
-
-		// 同源直接过
-		host := c.GetHeader("Host")
-		if origin == "http://"+host || origin == "https://"+host {
-			c.Next()
-			return
-		}
-
 		c.Header("Access-Control-Allow-Origin", "*")
 		c.Header("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token")
 		c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, PATCH, DELETE")

+ 50 - 0
app/middleware/token.go

@@ -0,0 +1,50 @@
+package middleware
+
+import (
+	"github.com/golang-jwt/jwt"
+	"iot_manager_service/app/system/model"
+	"iot_manager_service/config"
+	"time"
+)
+
+const (
+	Authorization = "Authorization"
+)
+
+var EmptyKeyFunc = func(t *jwt.Token) (interface{}, error) { return []byte(config.Instance().Server.TokenSign), nil }
+
+type JwtToken struct {
+	jwt.StandardClaims
+	TenantId string `json:"tenant_id"`
+	UserId   int64  `json:"user_id"`
+	RoleId   int64  `json:"role_id"`
+	UserName string `json:"user_name"`
+	NickName string `json:"nick_name"`
+	Random   string `json:"random"`
+}
+
+func GetAccessToken(userId, roleId int64, tenantId, userName string, random string) (string, error) {
+	jwtToken := JwtToken{StandardClaims: jwt.StandardClaims{
+		Audience:  model.Audience,
+		Issuer:    model.Issuer,
+		ExpiresAt: time.Now().Add(2 * time.Hour).Unix(),
+		NotBefore: time.Now().Unix(),
+	},
+		UserId:   userId,
+		TenantId: tenantId,
+		RoleId:   roleId,
+		UserName: userName,
+		Random:   random,
+	}
+
+	claims := jwt.NewWithClaims(jwt.SigningMethodHS512, jwtToken)
+	return claims.SignedString([]byte(config.Instance().Server.TokenSign))
+}
+
+func parseAccessToken(authorization string) *JwtToken {
+	token, err := jwt.ParseWithClaims(authorization, &JwtToken{}, EmptyKeyFunc)
+	if err != nil {
+		return nil
+	}
+	return token.Claims.(*JwtToken)
+}

+ 26 - 1
app/system/controller/menu.go

@@ -2,6 +2,7 @@ package controller
 
 import (
 	"github.com/gin-gonic/gin"
+	"iot_manager_service/app/middleware"
 	"iot_manager_service/app/system/dao"
 	"iot_manager_service/app/system/service"
 	"iot_manager_service/util"
@@ -31,15 +32,19 @@ func (c *menu) GetDetail(ctx *gin.Context) {
 func (c *menu) List(ctx *gin.Context) {
 
 }
+
 func (c *menu) LazyList(ctx *gin.Context) {
 
 }
+
 func (c *menu) MenuList(ctx *gin.Context) {
 
 }
+
 func (c *menu) LazyMenuList(ctx *gin.Context) {
 
 }
+
 func (c *menu) Submit(ctx *gin.Context) {
 	var req dao.Menu
 	if err := ctx.ShouldBindJSON(&req); err != nil {
@@ -49,36 +54,56 @@ func (c *menu) Submit(ctx *gin.Context) {
 	err := service.MenuService.Submit(req)
 	ctx.JSON(http.StatusOK, err)
 }
+
 func (c *menu) Remove(ctx *gin.Context) {
 
 }
-func (c *menu) Routes(ctx *gin.Context) {
 
+func (c *menu) Routes(ctx *gin.Context) {
+	value, isExist := ctx.Get(middleware.Authorization)
+	if !isExist || value == nil {
+		ctx.JSON(http.StatusUnauthorized, util.NormalResponse(http.StatusUnauthorized, "", nil))
+	}
+	menus, err := service.MenuService.Routes(value.(*middleware.JwtToken).RoleId)
+	if err != nil {
+		ctx.JSON(http.StatusOK, util.FailResponse(err.Error(), nil))
+		return
+	}
+	ctx.JSON(http.StatusOK, menus)
 }
+
 func (c *menu) RoutesExt(cxt *gin.Context) {
 
 }
+
 func (c *menu) Buttons(ctx *gin.Context) {
 
 }
+
 func (c *menu) Tree(ctx *gin.Context) {
 
 }
+
 func (c *menu) GrantTree(ctx *gin.Context) {
 
 }
+
 func (c *menu) RoleTreeKeys(ctx *gin.Context) {
 
 }
+
 func (c *menu) GrantTopTree(ctx *gin.Context) {
 
 }
+
 func (c *menu) TopTreeKeys(ctx *gin.Context) {
 
 }
+
 func (c *menu) TopMenu(ctx *gin.Context) {
 
 }
+
 func (c *menu) authRoutes(ctx *gin.Context) {
 
 }

+ 6 - 0
app/system/controller/tenant.go

@@ -15,6 +15,12 @@ var Tenant = new(tenant)
 
 type tenant struct{}
 
+func (c *tenant) GetInfo(ctx *gin.Context) {
+	domain := ctx.Query("domain")
+	tenant, _ := service.TenantService.GetByDomain(domain)
+	ctx.JSON(http.StatusOK, util.SuccessResponse(util.Succeeded, tenant))
+}
+
 func (c *tenant) GetDetail(ctx *gin.Context) {
 	id := ctx.Query("id")
 	iId, err := strconv.ParseInt(id, 10, 64)

+ 59 - 50
app/system/controller/token.go

@@ -6,9 +6,9 @@ import (
 	"github.com/golang-jwt/jwt"
 	"github.com/mojocn/base64Captcha"
 	"github.com/satori/go.uuid"
+	"iot_manager_service/app/middleware"
 	"iot_manager_service/app/system/dao"
 	"iot_manager_service/app/system/service"
-	"strconv"
 	"time"
 
 	"iot_manager_service/app/system/model"
@@ -50,11 +50,22 @@ func (c *auth) Token(ctx *gin.Context) {
 		RefreshToken: refreshToken,
 		UserType:     userType,
 	}
-	userInfo, err := grant(token, ctx)
-	if err != nil {
-		ctx.JSON(http.StatusOK, err)
-		return
+	var userInfo *model.UserInfo
+	var err *util.Errors
+	if grantType == "captcha" {
+		userInfo, err = captchaGrant(token, ctx)
+		if err != nil {
+			ctx.JSON(http.StatusOK, err)
+			return
+		}
+	} else if grantType == "refresh_token" {
+		userInfo, err = refreshGrant(token)
+		if err != nil {
+			ctx.JSON(http.StatusOK, err)
+			return
+		}
 	}
+
 	if userInfo == nil || userInfo.User == nil {
 		ctx.JSON(http.StatusOK, util.NormalResponse(http.StatusBadRequest, model.UserNotFound, nil))
 		return
@@ -66,7 +77,7 @@ func (c *auth) Token(ctx *gin.Context) {
 
 	// access token过期时间2小时
 	random := util.RandomString(8)
-	jwtToken, e := getAccessToken(*userInfo, random)
+	jwtToken, e := middleware.GetAccessToken(userInfo.ID, userInfo.RoleId, userInfo.TenantId, userInfo.Account, random)
 	if e != nil {
 		ctx.JSON(http.StatusOK, util.NormalResponse(http.StatusBadRequest, e.Error(), nil))
 		return
@@ -76,9 +87,7 @@ func (c *auth) Token(ctx *gin.Context) {
 	util.Redis.Set(getAccessTokenKey(userInfo.TenantId, userInfo.ID, random), jwtToken, 2*time.Hour)
 	ctx.JSON(http.StatusOK, model.RspToken{
 		TenantId:     userInfo.TenantId,
-		UserId:       strconv.FormatInt(userInfo.ID, 10),
-		DeptId:       userInfo.DeptId,
-		PostId:       userInfo.PostId,
+		UserId:       userInfo.ID,
 		RoleId:       userInfo.RoleId,
 		OauthId:      userInfo.OauthId,
 		Account:      userInfo.Account,
@@ -95,15 +104,13 @@ func (c *auth) Token(ctx *gin.Context) {
 }
 
 func (c *auth) Logout(ctx *gin.Context) {
-	emptyKeyFunc := func(t *jwt.Token) (interface{}, error) { return []byte(config.Instance().Server.TokenSign), nil }
-	authorization := ctx.GetHeader(model.HeaderKey)
-	token, err := jwt.ParseWithClaims(authorization, &model.JwtToken{}, emptyKeyFunc)
-	if err != nil {
-		ctx.JSON(http.StatusUnauthorized, util.NormalResponse(http.StatusUnauthorized, err.Error(), nil))
+	value, isExist := ctx.Get(middleware.Authorization)
+	if !isExist || value == nil {
+		ctx.JSON(http.StatusUnauthorized, util.NormalResponse(http.StatusUnauthorized, "", nil))
 		return
 	}
-	jwtToken := token.Claims.(*model.JwtToken)
-	err = util.Redis.Del(getAccessTokenKey(jwtToken.TenantId, jwtToken.UserId, jwtToken.Random)).Err()
+	jwtToken := value.(*middleware.JwtToken)
+	_ = util.Redis.Del(getAccessTokenKey(jwtToken.TenantId, jwtToken.UserId, jwtToken.Random)).Err()
 	//todo 操作记录
 	ctx.JSON(http.StatusOK, util.SuccessResponse("", nil))
 }
@@ -147,32 +154,6 @@ func checkLock() {
 
 }
 
-func getAccessToken(info model.UserInfo, random string) (string, error) {
-	jwtToken := model.JwtToken{StandardClaims: jwt.StandardClaims{
-		Audience:  model.Audience,
-		Issuer:    model.Issuer,
-		ExpiresAt: time.Now().Add(2 * time.Hour).Unix(),
-		NotBefore: time.Now().Unix(),
-	},
-		UserId:    info.ID,
-		TenantId:  info.TenantId,
-		TokenType: model.AccessToken,
-		ClientId:  model.Saber,
-		RoleId:    info.RoleId,
-		RoleName:  info.Roles[0],
-		DeptId:    info.DeptId,
-		PostId:    info.PostId,
-		OauthId:   info.OauthId,
-		Account:   info.Account,
-		UserName:  info.Account,
-		NickName:  info.RealName,
-		Random:    random,
-	}
-
-	claims := jwt.NewWithClaims(jwt.SigningMethodHS512, jwtToken)
-	return claims.SignedString([]byte(config.Instance().Server.TokenSign))
-}
-
 func getRefreshToken(info model.UserInfo) string {
 	claims := jwt.NewWithClaims(jwt.SigningMethodHS512, jwt.MapClaims{
 		model.Iss:       model.Issuer,
@@ -187,7 +168,15 @@ func getRefreshToken(info model.UserInfo) string {
 	return token
 }
 
-func grant(token model.Token, ctx *gin.Context) (*model.UserInfo, *util.Errors) {
+func parseRefreshToken(refreshToken string) *jwt.MapClaims {
+	token, err := jwt.ParseWithClaims(refreshToken, &jwt.MapClaims{}, middleware.EmptyKeyFunc)
+	if err != nil {
+		return nil
+	}
+	return token.Claims.(*jwt.MapClaims)
+}
+
+func captchaGrant(token model.Token, ctx *gin.Context) (*model.UserInfo, *util.Errors) {
 	info := &model.UserInfo{}
 	key := ctx.GetHeader(model.CaptchaHeaderKey)
 	code := ctx.GetHeader(model.CaptchaHeaderCode)
@@ -214,13 +203,33 @@ func grant(token model.Token, ctx *gin.Context) (*model.UserInfo, *util.Errors)
 		// 获取用户类型
 		// 根据不同用户类型调用对应的接口返回数据,用户可自行拓展
 		info.User = service.UserService.GetOne(token.TenantId, token.UserName, token.Password)
+		info.TenantId = token.TenantId
+		info.Roles = []string{"admin"}
 	}
 
-	//测试代码start
-	info.TenantId = "000000"
-	info.ID = 11112222
+	//todo 操作记录
+	return info, nil
+}
+
+func refreshGrant(token model.Token) (*model.UserInfo, *util.Errors) {
+	info := &model.UserInfo{}
+	jwtToken := parseRefreshToken(token.RefreshToken)
+	if jwtToken == nil || len(*jwtToken) != 7 {
+		return nil, util.NormalResponse(http.StatusOK, model.UserHasNoTenantPermission, nil)
+	}
+
+	// 获取租户信息
+	tenant, _ := service.TenantService.GetOne(token.TenantId)
+	if tenant == nil {
+		return nil, util.NormalResponse(http.StatusOK, model.UserHasNoTenant, nil)
+	}
+	if judgeTenant(tenant) {
+		return nil, util.NormalResponse(http.StatusOK, model.UserHasNoTenantPermission, nil)
+	}
+
+	info.User = service.UserService.GetOneByTenantId(token.TenantId)
 	info.Roles = []string{"admin"}
-	// 测试代码end
+
 	//todo 操作记录
 	return info, nil
 }
@@ -229,10 +238,10 @@ func judgeTenant(tenant *dao.Tenant) bool {
 	if tenant.TenantId == model.AdminTenantId {
 		return false
 	}
-	if tenant.ExpireTime.IsZero() || tenant.ExpireTime.Before(time.Now()) {
-		return true
+	if tenant.ExpireTime.IsZero() || !tenant.ExpireTime.Before(time.Now()) {
+		return false
 	}
-	return false
+	return true
 }
 
 func getAccessTokenKey(tenantId string, uId int64, random string) string {

+ 9 - 1
app/system/dao/menu.go

@@ -12,7 +12,7 @@ type Menu struct {
 	Sort      int    `gorm:"type:int" json:"sort"`                   //排序
 	Category  int    `gorm:"type:int" json:"category"`               //菜单类型
 	Action    int    `gorm:"type:int;default 0" json:"action"`       //操作按钮类型
-	IsOpen    int    `gorm:"type: int;default 1" json:"isOpen"`      //是否打开新页面
+	IsOpen    int    `gorm:"type:int;default 1" json:"isOpen"`       //是否打开新页面
 	Remark    string `gorm:"type:varchar(255)" json:"remark"`        //备注
 	IsDeleted int    `gorm:"type:int" json:"isDeleted"`              //是否删除
 }
@@ -20,9 +20,11 @@ type Menu struct {
 func (Menu) TableName() string {
 	return "menu"
 }
+
 func (c *Menu) Get() error {
 	return Db.Debug().Model(&c).Where("id = ?", c.ID).Find(&c).Error
 }
+
 func (c *Menu) Save() error {
 	return Db.Debug().Model(&c).Save(&c).Error
 }
@@ -30,3 +32,9 @@ func (c *Menu) Save() error {
 func (c *Menu) Update() error {
 	return Db.Debug().Model(&c).Where(" id = ? ", c.ID).Update(&c).Error
 }
+
+func (c *Menu) GetAll() ([]Menu, error) {
+	var menus []Menu
+	err := Db.Debug().Model(&c).Where(" is_deleted = 0 and category = 1").Order("sort").Find(&menus).Error
+	return menus, err
+}

+ 7 - 1
app/system/dao/roleMenu.go

@@ -6,7 +6,7 @@ type RoleMenu struct {
 	RoleId int64 `gorm:"type:bigint" json:"roleId"` //角色id
 }
 
-func (RoleMenu) Table() string {
+func (RoleMenu) TableName() string {
 	return "role_menu"
 }
 
@@ -21,3 +21,9 @@ func (c *RoleMenu) BatchSave(menus []RoleMenu) error {
 func (c *RoleMenu) DeleteRoleIds(roleIds []int64) error {
 	return Db.Debug().Model(&c).Where("role_id in ?", roleIds).Delete(&c).Error
 }
+
+func (c *RoleMenu) GetByRole() ([]RoleMenu, error) {
+	var menus []RoleMenu
+	err := Db.Debug().Model(&c).Where("role_id = ?", c.RoleId).Find(&menus).Error
+	return menus, err
+}

+ 4 - 0
app/system/dao/tenant.go

@@ -42,6 +42,10 @@ func (c *Tenant) Get() error {
 	return Db.Debug().Model(&c).Where("id = ? and is_deleted = 0", c.ID).Find(&c).Error
 }
 
+func (c *Tenant) GetByDomain() error {
+	return Db.Debug().Model(&c).Where("domain = ? and is_deleted = 0", c.Domain).Find(&c).Error
+}
+
 func (c *Tenant) GetTenant() error {
 	return Db.Debug().Model(&c).Where("tenant_id = ? and is_deleted = 0", c.TenantId).Find(&c).Error
 }

+ 5 - 3
app/system/dao/user.go

@@ -18,9 +18,7 @@ type User struct {
 	Phone                   string    `gorm:"type:varchar(45)" json:"phone"`                     //手机
 	Birthday                string    `gorm:"type:datetime" json:"birthday"`                     //生日
 	Sex                     int       `gorm:"type:smallint" json:"sex"`                          //生日
-	RoleId                  string    `gorm:"type:varchar(1000)" json:"roleId"`                  //角色id 数组,分隔
-	DeptId                  string    `gorm:"type:varchar(1000)" json:"deptId"`                  //部门id 数组,分隔
-	PostId                  string    `gorm:"type:varchar(1000)" json:"postId"`                  //岗位id 数组,分隔
+	RoleId                  int64     `gorm:"type:bigint" json:"roleId"`                         //角色id 数组,分隔
 	CreateUser              int64     `gorm:"type:bigint" json:"createUser"`                     //创建人
 	CreateDept              int64     `gorm:"type:bigint" json:"createDept"`                     //创建部门
 	CreateTime              time.Time `gorm:"type:datetime" json:"createTime"`                   //新增时间
@@ -41,6 +39,10 @@ func (c *User) GetUser() error {
 	return Db.Debug().Model(&c).Where("id = ? and is_deleted = 0", c.ID).Find(&c).Error
 }
 
+func (c *User) GetUserByTenantId() error {
+	return Db.Debug().Model(&c).Where("tenant_id = ? and is_deleted = 0", c.TenantId).Find(&c).Error
+}
+
 func (c *User) GetUserByPwd() error {
 	return Db.Debug().Model(&c).Where("tenant_id = ? and account = ? and password = ? and is_deleted = 0", c.TenantId, c.Account, c.Password).Find(&c).Error
 }

+ 10 - 0
app/system/model/menu.go

@@ -9,3 +9,13 @@ type RsqMenuList struct {
 	Pages   int        `json:"pages"`    //总页数
 	Total   int        `json:"total"`    //总数
 }
+
+type RsqMenuRoutes struct {
+	MenuRouteDetails []MenuRouteDetail `json:"data"`
+}
+
+type MenuRouteDetail struct {
+	dao.Menu
+	HasChildren bool              `json:"hasChildren"`
+	Children    []MenuRouteDetail `json:"children"`
+}

+ 1 - 1
app/system/model/role.go

@@ -23,7 +23,7 @@ type ReqRoleGrant struct {
 }
 
 type RspRoleTree struct {
-	RoleDetails []RoleDetail
+	RoleDetails []RoleDetail `json:"data"`
 }
 
 type RoleDetail struct {

+ 3 - 25
app/system/model/token.go

@@ -1,26 +1,6 @@
 package model
 
-import (
-	"github.com/golang-jwt/jwt"
-	"iot_manager_service/app/system/dao"
-)
-
-type JwtToken struct {
-	jwt.StandardClaims
-	TenantId  string `json:"tenant_id"`
-	UserId    int64  `json:"user_id"`
-	TokenType string `json:"token_type"`
-	ClientId  string `json:"client_id"`
-	RoleId    string `json:"role_id"`
-	RoleName  string `json:"role_name"`
-	DeptId    string `json:"dept_id"`
-	PostId    string `json:"post_id"`
-	OauthId   string `json:"oauth_id"`
-	Account   string `json:"account"`
-	UserName  string `json:"user_name"`
-	NickName  string `json:"nick_name"`
-	Random    string `json:"random"`
-}
+import "iot_manager_service/app/system/dao"
 
 type Token struct {
 	TenantId     string
@@ -40,10 +20,8 @@ type UserInfo struct {
 
 type RspToken struct {
 	TenantId     string `json:"tenant_id"`
-	UserId       string `json:"user_id"`
-	DeptId       string `json:"dept_id"`
-	PostId       string `json:"post_id"`
-	RoleId       string `json:"role_id"`
+	UserId       int64  `json:"user_id"`
+	RoleId       int64  `json:"role_id"`
 	OauthId      string `json:"oauth_id"`
 	Account      string `json:"account"`
 	UserName     string `json:"user_name"`

+ 0 - 2
app/system/model/user.go

@@ -6,8 +6,6 @@ type UserDetail struct {
 	dao.User
 	TenantName string `json:"tenantName"` //租户名
 	RoleName   string `json:"roleName"`   //角色名
-	DeptName   string `json:"deptName"`   //部门名
-	PostName   string `json:"postName"`   //岗位名
 	SexName    string `json:"sexName"`    //性别
 }
 

+ 64 - 0
app/system/service/menuService.go

@@ -2,6 +2,7 @@ package service
 
 import (
 	"iot_manager_service/app/system/dao"
+	"iot_manager_service/app/system/model"
 	"iot_manager_service/util"
 )
 
@@ -35,3 +36,66 @@ func (s *menuService) Submit(req dao.Menu) *util.Errors {
 	}
 	return util.SuccessResponse(util.Succeeded, nil)
 }
+
+func (s *menuService) GetAll() []dao.Menu {
+	menu := &dao.Menu{}
+	menus, err := menu.GetAll()
+	if err != nil {
+		return nil
+	}
+	return menus
+}
+
+func (s *menuService) Routes(roleId int64) (*model.RsqMenuRoutes, error) {
+	allMenus := MenuService.GetAll()
+	menuMap := make(map[int64]dao.Menu)
+	for _, menu := range allMenus {
+		menuMap[menu.ID] = menu
+	}
+
+	roleMenus := RoleMenuService.GetMenuByRole(roleId)
+
+	rsp := &model.RsqMenuRoutes{}
+	//上级角色——多个下级角色数组
+	tmp := make(map[int64][]dao.Menu)
+	for _, roleMenu := range roleMenus {
+		if menu, isExist := menuMap[roleMenu.MenuId]; isExist {
+			childes, isExist := tmp[menu.ParentId]
+			if isExist {
+				childes = append(childes, menu)
+				tmp[menu.ParentId] = childes
+			} else {
+				tmp[menu.ParentId] = []dao.Menu{menu}
+			}
+		}
+
+	}
+
+	if len(tmp) == 0 {
+		return nil, nil
+	}
+	roots, _ := tmp[0]
+	rsp.MenuRouteDetails = menuDfs(rsp.MenuRouteDetails, roots, tmp)
+
+	return rsp, nil
+}
+
+func menuDfs(result []model.MenuRouteDetail, menus []dao.Menu, tmp map[int64][]dao.Menu) []model.MenuRouteDetail {
+	if len(menus) == 0 {
+		return nil
+	}
+	for _, child := range menus {
+		detail := model.MenuRouteDetail{}
+		detail.Menu = child
+		childes, isExist := tmp[child.ID]
+		if isExist {
+			detail.HasChildren = true
+			detail.Children = menuDfs([]model.MenuRouteDetail{}, childes, tmp)
+			result = append(result, detail)
+		} else {
+			detail.HasChildren = false
+			result = append(result, detail)
+		}
+	}
+	return result
+}

+ 9 - 0
app/system/service/roleMenuService.go

@@ -25,3 +25,12 @@ func (s *roleMenuService) UpdateRoleMenus(roleIds, menuIds []int64) error {
 	}
 	return roleMenu.BatchSave(roleMenus)
 }
+
+func (s *roleMenuService) GetMenuByRole(roleId int64) []dao.RoleMenu {
+	roleMenu := &dao.RoleMenu{RoleId: roleId}
+	menus, err := roleMenu.GetByRole()
+	if err != nil {
+		return nil
+	}
+	return menus
+}

+ 12 - 1
app/system/service/tenantService.go

@@ -13,7 +13,7 @@ type tenantService struct{}
 
 func (s *tenantService) GetTenantByPasskey(passKey string) (*dao.Tenant, error) {
 	tenant := &dao.Tenant{
-		TenantId: passKey,
+		PassKey: passKey,
 	}
 	err := tenant.GetTenantByPasskey()
 	if err != nil {
@@ -44,6 +44,17 @@ func (s *tenantService) Get(id int64) (*dao.Tenant, error) {
 	return tenant, nil
 }
 
+func (s *tenantService) GetByDomain(domain string) (*dao.Tenant, error) {
+	tenant := &dao.Tenant{
+		Domain: domain,
+	}
+	err := tenant.GetByDomain()
+	if err != nil {
+		return nil, err
+	}
+	return tenant, nil
+}
+
 func (s *tenantService) List(tenantId, tenantName, linkman string, current, size int) ([]dao.Tenant, error) {
 	tenant := &dao.Tenant{}
 	offset := (current - 1) * size

+ 13 - 6
app/system/service/userService.go

@@ -26,14 +26,23 @@ func (s *userService) Get(id int64) (*model.UserDetail, error) {
 	detail := &model.UserDetail{
 		User:       *user,
 		TenantName: util.GetTenantName(user.TenantId, user.TenantId),
-		RoleName:   util.GetRoleNames(user.TenantId, user.RoleId),
-		DeptName:   "",
-		PostName:   "",
+		RoleName:   util.GetRoleName(user.TenantId, user.RoleId),
 		SexName:    util.GetSexName(user.TenantId, user.Sex),
 	}
 	return detail, nil
 }
 
+func (s *userService) GetOneByTenantId(tenantId string) *dao.User {
+	user := &dao.User{
+		TenantId: tenantId,
+	}
+	err := user.GetUserByTenantId()
+	if err != nil {
+		return nil
+	}
+	return user
+}
+
 func (s *userService) GetOne(tenantId, account, password string) *dao.User {
 	// 密码前端先MD5 后端再sha1加密
 	t := sha1.New()
@@ -71,9 +80,7 @@ func (s *userService) List(account, realName string, current, size int) ([]model
 		details = append(details, model.UserDetail{
 			User:       user,
 			TenantName: util.GetTenantName(user.TenantId, user.TenantId),
-			RoleName:   util.GetRoleNames(user.TenantId, user.RoleId),
-			DeptName:   "", //智慧路灯 ?
-			PostName:   "",
+			RoleName:   util.GetRoleName(user.TenantId, user.RoleId),
 			SexName:    util.GetSexName(user.TenantId, user.Sex),
 		})
 	}

+ 13 - 11
router/router.go

@@ -15,15 +15,15 @@ func InitRouter(engine *gin.Engine) {
 	// 校验权限
 	engine.Use(middleware.CheckAuth())
 
-	// 设备管理
-	device := engine.Group("/api/longchi/device/")
-
-	// 设备管理
+	// 操作历史记录
 	handleHistory := engine.Group("/api/longchi/handlehistory")
 	{
 		handleHistory.GET("/list", controller.HandleHistory.List)
 	}
 
+	// 设备管理
+	device := engine.Group("/api/longchi/device/")
+
 	//桥梁
 	bridge := device.Group("bridge")
 	{
@@ -340,14 +340,15 @@ func InitRouter(engine *gin.Engine) {
 	}
 
 	//登录校验相关
-	auth := engine.Group("/api/blade-auth")
+	auth := engine.Group("/api/blade-auth/oauth")
 	{
-		auth.POST("/oauth/token", system.Auth.Token)
-		auth.POST("/oauth/logout", system.Auth.Logout)
-		auth.GET("/oauth/captcha", system.Auth.Captcha)
-		auth.GET("/oauth/clear-cache", system.Auth.Clear)
+		auth.POST("/token", system.Auth.Token)
+		auth.GET("/logout", system.Auth.Logout)
+		auth.GET("/captcha", system.Auth.Captcha)
+		auth.GET("/clear-cache", system.Auth.Clear)
 	}
-	login := engine.Group("/login")
+
+	login := engine.Group("/api/login")
 	{
 		login.GET("", system.Auth.Login)
 	}
@@ -368,6 +369,7 @@ func InitRouter(engine *gin.Engine) {
 	//租户
 	tenant := engine.Group("/api/blade-system/tenant")
 	{
+		tenant.GET("/info", system.Tenant.GetInfo)
 		tenant.GET("/detail", system.Tenant.GetDetail)
 		tenant.GET("/page", system.Tenant.List)
 		tenant.POST("/submit", system.Tenant.Submit)
@@ -403,7 +405,7 @@ func InitRouter(engine *gin.Engine) {
 		menu.GET("roleTreeKeys", system.Menu.RoleTreeKeys)
 		menu.GET("grantTopTree", system.Menu.GrantTopTree)
 		menu.GET("topTreeKeys", system.Menu.GrantTopTree)
-		menu.GET("topMenu", system.Menu.TopMenu)
+		menu.GET("top-menu", system.Menu.TopMenu)
 		menu.GET("authRoutes", system.Menu.Routes)
 	}
 }

+ 0 - 15
util/redis.go

@@ -7,7 +7,6 @@ import (
 	system "iot_manager_service/app/system/dao"
 	"iot_manager_service/config"
 	"strconv"
-	"strings"
 	"time"
 )
 
@@ -125,20 +124,6 @@ func GetTenantName(tenantId string, id string) string {
 	return name
 }
 
-func GetRoleNames(tenantId string, roleIds string) string {
-	roleIdArr := strings.Split(roleIds, ",")
-	names := ""
-	for _, roleId := range roleIdArr {
-		id, _ := strconv.ParseInt(roleId, 10, 64)
-		name := GetRoleName(tenantId, id)
-		names = names + name + ","
-	}
-	if len(names) > 0 {
-		return names[:len(names)-1]
-	}
-	return names
-}
-
 func GetRoleName(tenantId string, roleId int64) string {
 	var name string
 	key := fmt.Sprintf(RoleNameKey, tenantId, roleId)