delapp get menu
This commit is contained in:
@@ -4,7 +4,6 @@ import (
|
||||
"git.rosy.net.cn/jx-print/globals"
|
||||
"git.rosy.net.cn/jx-print/model"
|
||||
"git.rosy.net.cn/jx-print/services"
|
||||
"git.rosy.net.cn/jx-print/utils"
|
||||
"github.com/gin-gonic/gin"
|
||||
"net/http"
|
||||
)
|
||||
@@ -12,23 +11,14 @@ import (
|
||||
//查询账号下的app GET
|
||||
func GetApps(c *gin.Context) {
|
||||
var (
|
||||
b, ok bool
|
||||
token string
|
||||
user *model.User
|
||||
tokenInfo *model.TokenInfo
|
||||
)
|
||||
globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP())
|
||||
if token, b = checkToken(c); !b {
|
||||
return
|
||||
}
|
||||
if user, ok = utils.GetKet(token).(*model.User); !ok {
|
||||
c.JSON(http.StatusOK, &CallBack{
|
||||
Code: model.ErrCodeToken,
|
||||
Desc: "token 过期或无效!",
|
||||
})
|
||||
if tokenInfo = checkToken(c); tokenInfo == nil {
|
||||
return
|
||||
}
|
||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
||||
retVal, err = services.GetApps(c, user)
|
||||
retVal, err = services.GetApps(c, tokenInfo.User.UserID)
|
||||
return retVal, "", err
|
||||
}) {
|
||||
return
|
||||
@@ -45,11 +35,9 @@ type AddAppParam struct {
|
||||
//新建app POST
|
||||
func AddApp(c *gin.Context) {
|
||||
var (
|
||||
err error
|
||||
b, ok bool
|
||||
token string
|
||||
user *model.User
|
||||
param = &AddAppParam{}
|
||||
tokenInfo *model.TokenInfo
|
||||
err error
|
||||
param = &AddAppParam{}
|
||||
)
|
||||
globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP())
|
||||
if err = c.Bind(¶m); err != nil {
|
||||
@@ -60,18 +48,41 @@ func AddApp(c *gin.Context) {
|
||||
globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err)
|
||||
return
|
||||
}
|
||||
if token, b = checkToken(c); !b {
|
||||
return
|
||||
}
|
||||
if user, ok = utils.GetKet(token).(*model.User); !ok {
|
||||
c.JSON(http.StatusOK, &CallBack{
|
||||
Code: model.ErrCodeToken,
|
||||
Desc: "token 过期或无效!",
|
||||
})
|
||||
if tokenInfo = checkToken(c); tokenInfo == nil {
|
||||
return
|
||||
}
|
||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
||||
err = services.AddApp(c, param.Code, param.Name, param.Mobile, user.UserID)
|
||||
err = services.AddApp(c, param.Code, param.Name, param.Mobile, tokenInfo.User.UserID)
|
||||
return retVal, "", err
|
||||
}) {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//删除app POST
|
||||
func DelApp(c *gin.Context) {
|
||||
var (
|
||||
err error
|
||||
tokenInfo *model.TokenInfo
|
||||
param = &struct {
|
||||
AppID int `json:"app_id" form:"app_id" binding:"required"`
|
||||
}{}
|
||||
)
|
||||
globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP())
|
||||
if err = c.Bind(¶m); err != nil {
|
||||
c.JSON(http.StatusOK, &CallBack{
|
||||
Code: model.ErrCodeNormal,
|
||||
Desc: err.Error(),
|
||||
})
|
||||
globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err)
|
||||
return
|
||||
}
|
||||
if tokenInfo = checkToken(c); tokenInfo == nil {
|
||||
return
|
||||
}
|
||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
||||
err = services.DelApp(c, param.AppID, tokenInfo.User.UserID)
|
||||
return retVal, "", err
|
||||
}) {
|
||||
return
|
||||
|
||||
@@ -23,11 +23,14 @@ func init() {
|
||||
globals.SugarLogger.Debugf("test init ...")
|
||||
}
|
||||
|
||||
func checkToken(c *gin.Context) (token string, b bool) {
|
||||
func checkToken(c *gin.Context) (tokenInfo *model.TokenInfo) {
|
||||
var (
|
||||
cookie *http.Cookie
|
||||
err error
|
||||
ok bool
|
||||
user *model.User
|
||||
)
|
||||
tokenInfo = &model.TokenInfo{}
|
||||
//验证token
|
||||
//v2下的接口需要验证,v1不需要
|
||||
if !strings.Contains(c.Request.URL.String(), "v1") {
|
||||
@@ -36,20 +39,21 @@ func checkToken(c *gin.Context) (token string, b bool) {
|
||||
Desc: err.Error(),
|
||||
Code: model.ErrCodeNormal,
|
||||
})
|
||||
return "", false
|
||||
return nil
|
||||
} else {
|
||||
token = cookie.Value
|
||||
tokenInfo.Token = cookie.Value
|
||||
}
|
||||
if user := utils.GetKet(token); user == nil {
|
||||
if user, ok = utils.GetKet(tokenInfo.Token).(*model.User); !ok || user == nil {
|
||||
err = fmt.Errorf("token过期或无效,请重新登录!")
|
||||
c.JSON(http.StatusOK, &CallBack{
|
||||
Desc: err.Error(),
|
||||
Code: model.ErrCodeToken,
|
||||
})
|
||||
return "", false
|
||||
return nil
|
||||
}
|
||||
tokenInfo.User = user
|
||||
}
|
||||
return token, true
|
||||
return tokenInfo
|
||||
}
|
||||
|
||||
func callFunc(c *gin.Context, worker func() (retVal interface{}, errCode string, err error)) bool {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"git.rosy.net.cn/jx-print/globals"
|
||||
"git.rosy.net.cn/jx-print/model"
|
||||
"git.rosy.net.cn/jx-print/services"
|
||||
@@ -34,7 +35,7 @@ func GetUsers(c *gin.Context) {
|
||||
})
|
||||
return
|
||||
}
|
||||
if _, b := checkToken(c); !b {
|
||||
if tokenInfo := checkToken(c); tokenInfo == nil {
|
||||
return
|
||||
}
|
||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
||||
@@ -119,33 +120,31 @@ func Login(c *gin.Context) {
|
||||
//自动登录,获取token POST
|
||||
func GetTokenInfo(c *gin.Context) {
|
||||
var (
|
||||
token string
|
||||
b bool
|
||||
tokenInfo *model.TokenInfo
|
||||
)
|
||||
globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP())
|
||||
if token, b = checkToken(c); !b {
|
||||
return
|
||||
}
|
||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
||||
retVal, err = services.GetTokenInfo(c, token)
|
||||
return retVal, "", err
|
||||
}) {
|
||||
if tokenInfo = checkToken(c); tokenInfo == nil {
|
||||
return
|
||||
}
|
||||
data, _ := json.Marshal(tokenInfo)
|
||||
c.JSON(http.StatusOK, &CallBack{
|
||||
Code: model.ErrCodeSuccess,
|
||||
Data: string(data),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
//登出,删token POST
|
||||
func Logout(c *gin.Context) {
|
||||
var (
|
||||
token string
|
||||
b bool
|
||||
tokenInfo *model.TokenInfo
|
||||
)
|
||||
if token, b = checkToken(c); !b {
|
||||
globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP())
|
||||
if tokenInfo = checkToken(c); tokenInfo == nil {
|
||||
return
|
||||
}
|
||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
||||
err = services.Logout(c, token)
|
||||
err = services.Logout(c, tokenInfo.Token)
|
||||
return retVal, "", err
|
||||
}) {
|
||||
return
|
||||
@@ -170,7 +169,7 @@ func UpdateUser(c *gin.Context) {
|
||||
globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err)
|
||||
return
|
||||
}
|
||||
if _, b := checkToken(c); !b {
|
||||
if tokenInfo := checkToken(c); tokenInfo == nil {
|
||||
return
|
||||
}
|
||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
||||
@@ -181,3 +180,15 @@ func UpdateUser(c *gin.Context) {
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//获取菜单,文档 GET
|
||||
func GetMenu(c *gin.Context) {
|
||||
globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP())
|
||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
||||
retVal, err = services.GetMenu(c)
|
||||
return retVal, "", err
|
||||
}) {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@@ -5,13 +5,17 @@ import (
|
||||
"github.com/jmoiron/sqlx"
|
||||
)
|
||||
|
||||
func GetApps(db *sqlx.DB, userID, mobile string) (apps []*model.Apps, err error) {
|
||||
func GetApps(db *sqlx.DB, id int, userID, mobile string) (apps []*model.Apps, err error) {
|
||||
var sqlParams []interface{}
|
||||
sql := `
|
||||
SELECT *
|
||||
FROM apps
|
||||
WHERE 1 = 1
|
||||
`
|
||||
if id != 0 {
|
||||
sql += " AND id = ?"
|
||||
sqlParams = append(sqlParams, id)
|
||||
}
|
||||
if userID != "" {
|
||||
sql += " AND user_id = ?"
|
||||
sqlParams = append(sqlParams, userID)
|
||||
|
||||
@@ -57,3 +57,16 @@ func GetUserForLogin(db *sqlx.DB, name, password string) (user *model.User, err
|
||||
}
|
||||
return user, err
|
||||
}
|
||||
|
||||
func GetMenus(db *sqlx.DB) (menus []*model.Menu, err error) {
|
||||
var sqlParams []interface{}
|
||||
sql := `
|
||||
SELECT *
|
||||
FROM menu
|
||||
WHERE 1 = 1
|
||||
`
|
||||
if err = db.Select(&menus, sql, sqlParams...); err == nil {
|
||||
return menus, err
|
||||
}
|
||||
return menus, err
|
||||
}
|
||||
|
||||
@@ -34,6 +34,11 @@ var (
|
||||
}
|
||||
)
|
||||
|
||||
type TokenInfo struct {
|
||||
User *User
|
||||
Token string `json:"token"`
|
||||
}
|
||||
|
||||
type ModelIDCULD struct {
|
||||
ID int `json:"id" db:"id"`
|
||||
CreatedAt *time.Time `json:"created_at" db:"created_at"`
|
||||
@@ -82,3 +87,18 @@ type Apps struct {
|
||||
Status int `json:"status"` //状态
|
||||
Mobile string `json:"mobile"` //手机号
|
||||
}
|
||||
|
||||
type Menu struct {
|
||||
ID int `json:"id" db:"id"`
|
||||
CreatedAt *time.Time `json:"created_at" db:"created_at"`
|
||||
UpdatedAt *time.Time `json:"updated_at" db:"updated_at"`
|
||||
LastOperator string `json:"last_operator" db:"last_operator"`
|
||||
DeletedAt *time.Time `json:"deleted_at" db:"deleted_at"`
|
||||
Name string `json:"name"` //功能名
|
||||
URL string `json:"url" db:"url"` //路径
|
||||
ImgURL string `json:"img_url" db:"img_url"` //图标
|
||||
Level int `json:"level"` //级别
|
||||
ParentID int `json:"parent_id" db:"parent_id"` //父功能ID
|
||||
Color string `json:"color"` //颜色
|
||||
Content string `json:"content"` //菜单内容
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ func Init(r *gin.Engine) {
|
||||
app := v2.Group("/app")
|
||||
app.GET("/getApps", controllers.GetApps)
|
||||
app.GET("/addApp", controllers.AddApp)
|
||||
app.GET("/delApp", controllers.DelApp)
|
||||
|
||||
//v1是不需要token的
|
||||
v1 := r.Group("v1")
|
||||
@@ -24,4 +25,5 @@ func Init(r *gin.Engine) {
|
||||
userw.GET("/login", controllers.Login)
|
||||
userw.GET("/refreshCode", controllers.RefreshCode)
|
||||
userw.GET("/register", controllers.RegisterUser)
|
||||
userw.GET("/getMenu", controllers.GetMenu)
|
||||
}
|
||||
|
||||
@@ -11,14 +11,11 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
func GetApps(c *gin.Context, user *model.User) (apps []*model.Apps, err error) {
|
||||
if user == nil {
|
||||
return nil, fmt.Errorf("未获取到账号信息!")
|
||||
}
|
||||
if user.UserID == "" {
|
||||
func GetApps(c *gin.Context, userID string) (apps []*model.Apps, err error) {
|
||||
if userID == "" {
|
||||
return nil, fmt.Errorf("账号信息有误,请重新登录!")
|
||||
}
|
||||
return dao.GetApps(globals.GetDB(), user.UserID, "")
|
||||
return dao.GetApps(globals.GetDB(), 0, userID, "")
|
||||
}
|
||||
|
||||
func AddApp(c *gin.Context, code, name, mobile, userID string) (err error) {
|
||||
@@ -35,10 +32,10 @@ func AddApp(c *gin.Context, code, name, mobile, userID string) (err error) {
|
||||
}
|
||||
putils.DelKey(mobile)
|
||||
|
||||
if apps, _ := dao.GetApps(db, userID, ""); len(apps) > 2 {
|
||||
if apps, _ := dao.GetApps(db, 0, userID, ""); len(apps) > 2 {
|
||||
return fmt.Errorf("同一个账号最多只能建3个app!")
|
||||
}
|
||||
if apps, _ := dao.GetApps(db, "", mobile); len(apps) > 0 {
|
||||
if apps, _ := dao.GetApps(db, 0, "", mobile); len(apps) > 0 {
|
||||
return fmt.Errorf("同一个手机号只能建1个app!")
|
||||
}
|
||||
apps := &model.Apps{
|
||||
@@ -55,3 +52,23 @@ func AddApp(c *gin.Context, code, name, mobile, userID string) (err error) {
|
||||
err = dao.Insert(db, apps)
|
||||
return err
|
||||
}
|
||||
|
||||
func DelApp(c *gin.Context, appID int, userID string) (err error) {
|
||||
var (
|
||||
db = globals.GetDB()
|
||||
now = time.Now()
|
||||
)
|
||||
if appID == 0 {
|
||||
return fmt.Errorf("参数错误!appID :%v", appID)
|
||||
}
|
||||
if apps, err2 := dao.GetApps(db, appID, userID, ""); err2 != nil {
|
||||
return err2
|
||||
} else if len(apps) == 0 {
|
||||
return fmt.Errorf("未查询到此应用!app_id :%d, user_id: %s", appID, userID)
|
||||
} else {
|
||||
app := apps[0]
|
||||
app.DeletedAt = &now
|
||||
err = dao.Update(db, app, model.FieldDeletedAt)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -92,14 +92,6 @@ func createToken(user *model.User) (token string) {
|
||||
}, TokenTypeSep)
|
||||
}
|
||||
|
||||
func GetTokenInfo(c *gin.Context, token string) (user *model.User, err error) {
|
||||
result := putils.GetKet(token)
|
||||
if user, ok := result.(*model.User); !ok {
|
||||
return user, err
|
||||
}
|
||||
return user, err
|
||||
}
|
||||
|
||||
func Logout(c *gin.Context, token string) (err error) {
|
||||
return putils.DelKey(token)
|
||||
}
|
||||
@@ -124,3 +116,7 @@ func UpdateUser(c *gin.Context, payload string) (err error) {
|
||||
err = dao.UpdateDiff(db, userp, user)
|
||||
return err
|
||||
}
|
||||
|
||||
func GetMenu(c *gin.Context) (menus []*model.Menu, err error) {
|
||||
return dao.GetMenus(globals.GetDB())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user