diff --git a/app/controller/admin/auth.go b/app/controller/admin/auth.go index 01e3ea3..9c72ff6 100644 --- a/app/controller/admin/auth.go +++ b/app/controller/admin/auth.go @@ -2,12 +2,12 @@ package admin import ( "fmt" - "gfast/app/model/auth_rule" - "gfast/app/model/role" - "gfast/app/model/user" - "gfast/app/service/auth_service" + "gfast/app/model/admin/auth_rule" + "gfast/app/model/admin/role" + "gfast/app/model/admin/user" + "gfast/app/service/admin/auth_service" + "gfast/app/service/admin/user_service" "gfast/app/service/casbin_adapter_service" - "gfast/app/service/user_service" "gfast/library/response" "gfast/library/utils" "github.com/gogf/gf/frame/g" @@ -34,13 +34,30 @@ func (c *Auth) MenuList(r *ghttp.Request) { }) } +//菜单排序 +func (c *Auth) MenuSort(r *ghttp.Request) { + sorts := r.Get("sorts") + s := gconv.Map(sorts) + if s == nil { + response.FailJson(true, r, "排序失败") + } + for k, v := range s { + auth_rule.Model.Where("id=?", k).Data("weigh", v).Update() + } + response.SusJson(true, r, "排序成功") +} + //添加菜单 func (c *Auth) AddMenu(r *ghttp.Request) { if r.Method == "POST" { - menu := new(auth_service.MenuReq) + menu := new(auth_rule.MenuReq) if err := r.Parse(menu); err != nil { response.FailJson(true, r, err.(*gvalid.Error).FirstString()) } + //判断菜单规则是否存在 + if !auth_service.CheckMenuNameUnique(menu.Name, 0) { + response.FailJson(true, r, "菜单规则名称已经存在") + } //保存到数据库 err, _ := auth_service.AddMenu(menu) if err != nil { @@ -60,12 +77,16 @@ func (c *Auth) AddMenu(r *ghttp.Request) { //修改菜单 func (c *Auth) EditMenu(r *ghttp.Request) { - id := r.GetRequestInt("id") + id := r.GetInt("id") if r.Method == "POST" { - menu := new(auth_service.MenuReq) + menu := new(auth_rule.MenuReq) if err := r.Parse(menu); err != nil { response.FailJson(true, r, err.(*gvalid.Error).FirstString()) } + //判断菜单规则是否存在 + if !auth_service.CheckMenuNameUnique(menu.Name, id) { + response.FailJson(true, r, "菜单规则名称已经存在") + } //保存到数据库 err, _ := auth_service.EditMenu(menu, id) if err != nil { diff --git a/app/controller/admin/index.go b/app/controller/admin/index.go index c5aab97..e36412f 100644 --- a/app/controller/admin/index.go +++ b/app/controller/admin/index.go @@ -1,7 +1,7 @@ package admin import ( - "gfast/app/service/user_service" + "gfast/app/service/admin/user_service" "gfast/library/response" "github.com/gogf/gf/frame/g" "github.com/gogf/gf/net/ghttp" diff --git a/app/model/admin/auth_rule/auth_rule.go b/app/model/admin/auth_rule/auth_rule.go new file mode 100644 index 0000000..c46563a --- /dev/null +++ b/app/model/admin/auth_rule/auth_rule.go @@ -0,0 +1,14 @@ +package auth_rule + +//菜单对象 +type MenuReq struct { + IsMenu int `p:"ismenu" c:"ismenu" v:"min:0|max:1#菜单类型最小值为:min|菜单类型最大值为:max"` + Pid int `p:"pid" c:"pid" v:"min:0"` + Name string `p:"name" c:"name" v:"required#请填写规则名称"` + Title string `p:"title" c:"title" v:"required|length:1,100#请填写标题|标题长度在:min到:max位"` + Icon string `p:"icon" c:"icon"` + Weigh int `p:"weigh" c:"weigh"` + Condition string `p:"condition" c:"condition"` + Remark string `p:"remark" c:"remark"` + Status int `p:"status" c:"status"` +} diff --git a/app/model/auth_rule/auth_rule_entity.go b/app/model/admin/auth_rule/auth_rule_entity.go similarity index 100% rename from app/model/auth_rule/auth_rule_entity.go rename to app/model/admin/auth_rule/auth_rule_entity.go diff --git a/app/model/auth_rule/auth_rule_model.go b/app/model/admin/auth_rule/auth_rule_model.go similarity index 100% rename from app/model/auth_rule/auth_rule_model.go rename to app/model/admin/auth_rule/auth_rule_model.go diff --git a/app/model/casbin_rule/casbin_rule_entity.go b/app/model/admin/casbin_rule/casbin_rule_entity.go similarity index 100% rename from app/model/casbin_rule/casbin_rule_entity.go rename to app/model/admin/casbin_rule/casbin_rule_entity.go diff --git a/app/model/casbin_rule/casbin_rule_model.go b/app/model/admin/casbin_rule/casbin_rule_model.go similarity index 100% rename from app/model/casbin_rule/casbin_rule_model.go rename to app/model/admin/casbin_rule/casbin_rule_model.go diff --git a/app/model/role/role_entity.go b/app/model/admin/role/role_entity.go similarity index 100% rename from app/model/role/role_entity.go rename to app/model/admin/role/role_entity.go diff --git a/app/model/role/role_model.go b/app/model/admin/role/role_model.go similarity index 100% rename from app/model/role/role_model.go rename to app/model/admin/role/role_model.go diff --git a/app/model/user/user_entity.go b/app/model/admin/user/user_entity.go similarity index 100% rename from app/model/user/user_entity.go rename to app/model/admin/user/user_entity.go diff --git a/app/model/user/user_model.go b/app/model/admin/user/user_model.go similarity index 100% rename from app/model/user/user_model.go rename to app/model/admin/user/user_model.go diff --git a/app/service/auth_service/auth_rule.go b/app/service/admin/auth_service/auth_rule.go similarity index 91% rename from app/service/auth_service/auth_rule.go rename to app/service/admin/auth_service/auth_rule.go index 32804d3..18e3330 100644 --- a/app/service/auth_service/auth_rule.go +++ b/app/service/admin/auth_service/auth_rule.go @@ -4,9 +4,9 @@ import ( "database/sql" "errors" "fmt" - "gfast/app/model/auth_rule" - "gfast/app/model/role" - "gfast/app/model/user" + "gfast/app/model/admin/auth_rule" + "gfast/app/model/admin/role" + "gfast/app/model/admin/user" "gfast/app/service/casbin_adapter_service" "gfast/library/utils" "github.com/gogf/gf/database/gdb" @@ -17,19 +17,6 @@ import ( "github.com/gogf/gf/util/gvalid" ) -//菜单对象 -type MenuReq struct { - IsMenu int `p:"ismenu" c:"ismenu" v:"min:0|max:1#菜单类型最小值为:min|菜单类型最大值为:max"` - Pid int `p:"pid" c:"pid" v:"min:0"` - Name string `p:"name" c:"name" v:"required#请填写规则名称"` - Title string `p:"title" c:"title" v:"required|length:1,100#请填写标题|标题长度在:min到:max位"` - Icon string `p:"icon" c:"icon"` - Weigh int `p:"weigh" c:"weigh"` - Condition string `p:"condition" c:"condition"` - Remark string `p:"remark" c:"remark"` - Status int `p:"status" c:"status"` -} - //获取菜单列表 func GetMenuList(where string, params ...interface{}) (error, g.List) { var err error @@ -51,8 +38,22 @@ func GetMenuList(where string, params ...interface{}) (error, g.List) { return nil, gList } +//检查菜单规则是否存在 +func CheckMenuNameUnique(name string, id int) bool { + model := auth_rule.Model.Where("name=?", name) + if id != 0 { + model = model.And("id!=?", id) + } + c, err := model.Count() + if err != nil { + g.Log().Error(err) + return false + } + return c == 0 +} + // 添加菜单操作 -func AddMenu(req *MenuReq) (err error, insertId int64) { +func AddMenu(req *auth_rule.MenuReq) (err error, insertId int64) { menuMap := gconv.Map(req) now := gtime.Timestamp() menuMap["createtime"] = now @@ -64,7 +65,7 @@ func AddMenu(req *MenuReq) (err error, insertId int64) { } //修改菜单操作 -func EditMenu(req *MenuReq, id int) (err error, rows int64) { +func EditMenu(req *auth_rule.MenuReq, id int) (err error, rows int64) { menuMap := gconv.Map(req) now := gtime.Timestamp() menuMap["updatetime"] = now diff --git a/app/service/user_service/user.go b/app/service/admin/user_service/user.go similarity index 96% rename from app/service/user_service/user.go rename to app/service/admin/user_service/user.go index 9d9f8de..644d959 100644 --- a/app/service/user_service/user.go +++ b/app/service/admin/user_service/user.go @@ -2,9 +2,9 @@ package user_service import ( "fmt" - "gfast/app/model/role" - "gfast/app/model/user" - "gfast/app/service/auth_service" + "gfast/app/model/admin/role" + "gfast/app/model/admin/user" + "gfast/app/service/admin/auth_service" "gfast/app/service/casbin_adapter_service" "gfast/boot" "gfast/library/utils" diff --git a/app/service/casbin_adapter_service/adapter.go b/app/service/casbin_adapter_service/adapter.go index 52abd20..71ab5d2 100644 --- a/app/service/casbin_adapter_service/adapter.go +++ b/app/service/casbin_adapter_service/adapter.go @@ -2,7 +2,7 @@ package casbin_adapter_service import ( "fmt" - "gfast/app/model/casbin_rule" + "gfast/app/model/admin/casbin_rule" "github.com/casbin/casbin/v2" "github.com/casbin/casbin/v2/model" "github.com/casbin/casbin/v2/persist" diff --git a/library/utils/function.go b/library/utils/function.go index f2b6ccd..1a6a93e 100644 --- a/library/utils/function.go +++ b/library/utils/function.go @@ -4,7 +4,7 @@ import ( "database/sql" "errors" "fmt" - "gfast/app/model/user" + "gfast/app/model/admin/user" "gfast/library/response" "github.com/goflyfox/gtoken/gtoken" "github.com/gogf/gf/crypto/gaes" @@ -147,6 +147,10 @@ func signIn(username, password string, r *ghttp.Request) (error, *user.QxkjUser) if qxkjUser == nil { return errors.New("账号或密码错误"), nil } + //判断用户状态 + if qxkjUser.UserStatus == 0 { + return errors.New("用户已被冻结"), nil + } returnData := *qxkjUser //更新登陆时间及ip qxkjUser.LastLoginTime = gconv.Int(gtime.Timestamp()) diff --git a/router/middleware.go b/router/middleware.go index b60fde0..20eb1ec 100644 --- a/router/middleware.go +++ b/router/middleware.go @@ -2,12 +2,11 @@ package router import ( "fmt" - "gfast/app/model/auth_rule" + "gfast/app/model/admin/auth_rule" + "gfast/app/service/admin/user_service" "gfast/app/service/casbin_adapter_service" - "gfast/app/service/user_service" "gfast/library/response" "gfast/library/utils" - "github.com/gogf/gf/encoding/gurl" "github.com/gogf/gf/frame/g" "github.com/gogf/gf/net/ghttp" ) @@ -29,14 +28,10 @@ func MiddlewareAuth(r *ghttp.Request) { return } } - url := r.GetUrl() - info, err := gurl.ParseURL(url, 32) - if err != nil { - g.Log().Error(err) - response.FailJson(true, r, "请求地址错误") - } + url := r.Request.URL + g.Log().Debug(url.Path) //获取地址对应的菜单id - gValue, err := auth_rule.Model.Where("name=?", info["path"]).Fields("id").Value() + gValue, err := auth_rule.Model.Where("name=?", url.Path).Fields("id").Value() if err != nil { g.Log().Error(err) response.FailJson(true, r, "请求数据失败") @@ -56,7 +51,6 @@ func MiddlewareAuth(r *ghttp.Request) { response.FailJson(true, r, "没有访问权限") } hasAccess := false - g.Log().Debug(groupPolicy) for _, v := range groupPolicy { if enforcer.HasPolicy(v[1], fmt.Sprintf("r_%d", menuId), "All") { hasAccess = true