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/globals"
|
||||||
"git.rosy.net.cn/jx-print/model"
|
"git.rosy.net.cn/jx-print/model"
|
||||||
"git.rosy.net.cn/jx-print/services"
|
"git.rosy.net.cn/jx-print/services"
|
||||||
"git.rosy.net.cn/jx-print/utils"
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
@@ -12,23 +11,14 @@ import (
|
|||||||
//查询账号下的app GET
|
//查询账号下的app GET
|
||||||
func GetApps(c *gin.Context) {
|
func GetApps(c *gin.Context) {
|
||||||
var (
|
var (
|
||||||
b, ok bool
|
tokenInfo *model.TokenInfo
|
||||||
token string
|
|
||||||
user *model.User
|
|
||||||
)
|
)
|
||||||
globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP())
|
globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP())
|
||||||
if token, b = checkToken(c); !b {
|
if tokenInfo = checkToken(c); tokenInfo == nil {
|
||||||
return
|
|
||||||
}
|
|
||||||
if user, ok = utils.GetKet(token).(*model.User); !ok {
|
|
||||||
c.JSON(http.StatusOK, &CallBack{
|
|
||||||
Code: model.ErrCodeToken,
|
|
||||||
Desc: "token 过期或无效!",
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
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 retVal, "", err
|
||||||
}) {
|
}) {
|
||||||
return
|
return
|
||||||
@@ -45,11 +35,9 @@ type AddAppParam struct {
|
|||||||
//新建app POST
|
//新建app POST
|
||||||
func AddApp(c *gin.Context) {
|
func AddApp(c *gin.Context) {
|
||||||
var (
|
var (
|
||||||
err error
|
tokenInfo *model.TokenInfo
|
||||||
b, ok bool
|
err error
|
||||||
token string
|
param = &AddAppParam{}
|
||||||
user *model.User
|
|
||||||
param = &AddAppParam{}
|
|
||||||
)
|
)
|
||||||
globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP())
|
globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP())
|
||||||
if err = c.Bind(¶m); err != nil {
|
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)
|
globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if token, b = checkToken(c); !b {
|
if tokenInfo = checkToken(c); tokenInfo == nil {
|
||||||
return
|
|
||||||
}
|
|
||||||
if user, ok = utils.GetKet(token).(*model.User); !ok {
|
|
||||||
c.JSON(http.StatusOK, &CallBack{
|
|
||||||
Code: model.ErrCodeToken,
|
|
||||||
Desc: "token 过期或无效!",
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
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 retVal, "", err
|
||||||
}) {
|
}) {
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -23,11 +23,14 @@ func init() {
|
|||||||
globals.SugarLogger.Debugf("test init ...")
|
globals.SugarLogger.Debugf("test init ...")
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkToken(c *gin.Context) (token string, b bool) {
|
func checkToken(c *gin.Context) (tokenInfo *model.TokenInfo) {
|
||||||
var (
|
var (
|
||||||
cookie *http.Cookie
|
cookie *http.Cookie
|
||||||
err error
|
err error
|
||||||
|
ok bool
|
||||||
|
user *model.User
|
||||||
)
|
)
|
||||||
|
tokenInfo = &model.TokenInfo{}
|
||||||
//验证token
|
//验证token
|
||||||
//v2下的接口需要验证,v1不需要
|
//v2下的接口需要验证,v1不需要
|
||||||
if !strings.Contains(c.Request.URL.String(), "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(),
|
Desc: err.Error(),
|
||||||
Code: model.ErrCodeNormal,
|
Code: model.ErrCodeNormal,
|
||||||
})
|
})
|
||||||
return "", false
|
return nil
|
||||||
} else {
|
} 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过期或无效,请重新登录!")
|
err = fmt.Errorf("token过期或无效,请重新登录!")
|
||||||
c.JSON(http.StatusOK, &CallBack{
|
c.JSON(http.StatusOK, &CallBack{
|
||||||
Desc: err.Error(),
|
Desc: err.Error(),
|
||||||
Code: model.ErrCodeToken,
|
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 {
|
func callFunc(c *gin.Context, worker func() (retVal interface{}, errCode string, err error)) bool {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package controllers
|
package controllers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"git.rosy.net.cn/jx-print/globals"
|
"git.rosy.net.cn/jx-print/globals"
|
||||||
"git.rosy.net.cn/jx-print/model"
|
"git.rosy.net.cn/jx-print/model"
|
||||||
"git.rosy.net.cn/jx-print/services"
|
"git.rosy.net.cn/jx-print/services"
|
||||||
@@ -34,7 +35,7 @@ func GetUsers(c *gin.Context) {
|
|||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if _, b := checkToken(c); !b {
|
if tokenInfo := checkToken(c); tokenInfo == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
||||||
@@ -119,33 +120,31 @@ func Login(c *gin.Context) {
|
|||||||
//自动登录,获取token POST
|
//自动登录,获取token POST
|
||||||
func GetTokenInfo(c *gin.Context) {
|
func GetTokenInfo(c *gin.Context) {
|
||||||
var (
|
var (
|
||||||
token string
|
tokenInfo *model.TokenInfo
|
||||||
b bool
|
|
||||||
)
|
)
|
||||||
globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP())
|
globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP())
|
||||||
if token, b = checkToken(c); !b {
|
if tokenInfo = checkToken(c); tokenInfo == nil {
|
||||||
return
|
|
||||||
}
|
|
||||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
|
||||||
retVal, err = services.GetTokenInfo(c, token)
|
|
||||||
return retVal, "", err
|
|
||||||
}) {
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
data, _ := json.Marshal(tokenInfo)
|
||||||
|
c.JSON(http.StatusOK, &CallBack{
|
||||||
|
Code: model.ErrCodeSuccess,
|
||||||
|
Data: string(data),
|
||||||
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
//登出,删token POST
|
//登出,删token POST
|
||||||
func Logout(c *gin.Context) {
|
func Logout(c *gin.Context) {
|
||||||
var (
|
var (
|
||||||
token string
|
tokenInfo *model.TokenInfo
|
||||||
b bool
|
|
||||||
)
|
)
|
||||||
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
|
return
|
||||||
}
|
}
|
||||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
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 retVal, "", err
|
||||||
}) {
|
}) {
|
||||||
return
|
return
|
||||||
@@ -170,7 +169,7 @@ func UpdateUser(c *gin.Context) {
|
|||||||
globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err)
|
globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if _, b := checkToken(c); !b {
|
if tokenInfo := checkToken(c); tokenInfo == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
||||||
@@ -181,3 +180,15 @@ func UpdateUser(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
return
|
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"
|
"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{}
|
var sqlParams []interface{}
|
||||||
sql := `
|
sql := `
|
||||||
SELECT *
|
SELECT *
|
||||||
FROM apps
|
FROM apps
|
||||||
WHERE 1 = 1
|
WHERE 1 = 1
|
||||||
`
|
`
|
||||||
|
if id != 0 {
|
||||||
|
sql += " AND id = ?"
|
||||||
|
sqlParams = append(sqlParams, id)
|
||||||
|
}
|
||||||
if userID != "" {
|
if userID != "" {
|
||||||
sql += " AND user_id = ?"
|
sql += " AND user_id = ?"
|
||||||
sqlParams = append(sqlParams, userID)
|
sqlParams = append(sqlParams, userID)
|
||||||
|
|||||||
@@ -57,3 +57,16 @@ func GetUserForLogin(db *sqlx.DB, name, password string) (user *model.User, err
|
|||||||
}
|
}
|
||||||
return 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 {
|
type ModelIDCULD struct {
|
||||||
ID int `json:"id" db:"id"`
|
ID int `json:"id" db:"id"`
|
||||||
CreatedAt *time.Time `json:"created_at" db:"created_at"`
|
CreatedAt *time.Time `json:"created_at" db:"created_at"`
|
||||||
@@ -82,3 +87,18 @@ type Apps struct {
|
|||||||
Status int `json:"status"` //状态
|
Status int `json:"status"` //状态
|
||||||
Mobile string `json:"mobile"` //手机号
|
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 := v2.Group("/app")
|
||||||
app.GET("/getApps", controllers.GetApps)
|
app.GET("/getApps", controllers.GetApps)
|
||||||
app.GET("/addApp", controllers.AddApp)
|
app.GET("/addApp", controllers.AddApp)
|
||||||
|
app.GET("/delApp", controllers.DelApp)
|
||||||
|
|
||||||
//v1是不需要token的
|
//v1是不需要token的
|
||||||
v1 := r.Group("v1")
|
v1 := r.Group("v1")
|
||||||
@@ -24,4 +25,5 @@ func Init(r *gin.Engine) {
|
|||||||
userw.GET("/login", controllers.Login)
|
userw.GET("/login", controllers.Login)
|
||||||
userw.GET("/refreshCode", controllers.RefreshCode)
|
userw.GET("/refreshCode", controllers.RefreshCode)
|
||||||
userw.GET("/register", controllers.RegisterUser)
|
userw.GET("/register", controllers.RegisterUser)
|
||||||
|
userw.GET("/getMenu", controllers.GetMenu)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,14 +11,11 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetApps(c *gin.Context, user *model.User) (apps []*model.Apps, err error) {
|
func GetApps(c *gin.Context, userID string) (apps []*model.Apps, err error) {
|
||||||
if user == nil {
|
if userID == "" {
|
||||||
return nil, fmt.Errorf("未获取到账号信息!")
|
|
||||||
}
|
|
||||||
if user.UserID == "" {
|
|
||||||
return nil, fmt.Errorf("账号信息有误,请重新登录!")
|
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) {
|
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)
|
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!")
|
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!")
|
return fmt.Errorf("同一个手机号只能建1个app!")
|
||||||
}
|
}
|
||||||
apps := &model.Apps{
|
apps := &model.Apps{
|
||||||
@@ -55,3 +52,23 @@ func AddApp(c *gin.Context, code, name, mobile, userID string) (err error) {
|
|||||||
err = dao.Insert(db, apps)
|
err = dao.Insert(db, apps)
|
||||||
return err
|
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)
|
}, 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) {
|
func Logout(c *gin.Context, token string) (err error) {
|
||||||
return putils.DelKey(token)
|
return putils.DelKey(token)
|
||||||
}
|
}
|
||||||
@@ -124,3 +116,7 @@ func UpdateUser(c *gin.Context, payload string) (err error) {
|
|||||||
err = dao.UpdateDiff(db, userp, user)
|
err = dao.UpdateDiff(db, userp, user)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetMenu(c *gin.Context) (menus []*model.Menu, err error) {
|
||||||
|
return dao.GetMenus(globals.GetDB())
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user