187 lines
7.3 KiB
Go
187 lines
7.3 KiB
Go
package myCasbin
|
||
|
||
import (
|
||
"context"
|
||
"github.com/casbin/casbin/v2"
|
||
"github.com/gogf/gf/v2/frame/g"
|
||
"github.com/gogf/gf/v2/os/glog"
|
||
"github.com/hailaz/gf-casbin-adapter/v2"
|
||
"server/internal/consts"
|
||
"sync"
|
||
)
|
||
|
||
type myCasbin struct {
|
||
*casbin.Enforcer
|
||
}
|
||
|
||
var (
|
||
instance *myCasbin
|
||
once sync.Once
|
||
)
|
||
|
||
func init() {
|
||
ctx := context.Background()
|
||
once.Do(func() {
|
||
modelPath := g.Config().MustGet(ctx, "casbin.modelPath").String()
|
||
enforcer, err := casbin.NewEnforcer(modelPath, adapter.NewAdapter(
|
||
adapter.Options{
|
||
GDB: g.DB(),
|
||
FieldName: &adapter.FieldName{PType: "p_type"},
|
||
},
|
||
))
|
||
if err != nil {
|
||
glog.Errorf(ctx, "init casbin error: %v", err)
|
||
}
|
||
|
||
enforcer.LoadPolicy()
|
||
enforcer.AddGroupingPolicy(consts.UserRoleCode, consts.GuestRoleCode) // 用户继承游客角色权限
|
||
enforcer.AddGroupingPolicy(consts.StoreRoleCode, consts.UserRoleCode) // 门店继承用户角色权限
|
||
enforcer.AddGroupingPolicy(consts.MerchantRoleCode, consts.StoreRoleCode) // 商户继承门店角色权限
|
||
enforcer.AddGroupingPolicy(consts.AdminRoleCode, consts.MerchantRoleCode) // 管理员继承商户角色权限
|
||
// 游客
|
||
{
|
||
// 任务
|
||
enforcer.AddPolicy("guest", "/x/task/ranking", "GET", "获取排行榜")
|
||
enforcer.AddPolicy("guest", "/x/task/getNonLoginTaskList", "GET", "未登录获取任务列表")
|
||
|
||
// 游戏列表
|
||
enforcer.AddPolicy("guest", "/x/game", "GET", "获取游戏列表")
|
||
}
|
||
// 用户
|
||
{
|
||
// 发送短信
|
||
enforcer.AddPolicy("user", "/x/sms/send", "POST", "发送短信")
|
||
|
||
// 上传图片
|
||
enforcer.AddPolicy("user", "/x/upload/image", "POST", "上传图片")
|
||
enforcer.AddPolicy("user", "/x/upload/user", "POST", "上传头像图片")
|
||
|
||
enforcer.AddPolicy("user", "/x/user", "PUT", "修改个人信息")
|
||
enforcer.AddPolicy("user", "/x/user/getPhoneCode", "POST", "获取验证码")
|
||
enforcer.AddPolicy("user", "/x/user/bindPhone", "POST", "绑定手机号")
|
||
enforcer.AddPolicy("user", "/x/user/info", "GET", "查询用户个人信息")
|
||
|
||
// 游戏人生
|
||
enforcer.AddPolicy("user", "/x/user/boundInfo", "GET", "查询用户绑定信息")
|
||
enforcer.AddPolicy("user", "/x/user/boundUrl", "GET", "获取用户绑定的URL")
|
||
enforcer.AddPolicy("user", "/x/user/unBoundUrl", "GET", "获取用户取消绑定的URL")
|
||
enforcer.AddPolicy("user", "/x/user/gameRoleList", "GET", "查询用户游戏角色列表")
|
||
|
||
// 反馈信息
|
||
enforcer.AddPolicy("user", "/x/feedback", "GET", "获取反馈信息列表")
|
||
enforcer.AddPolicy("user", "/x/feedback", "POST", "添加反馈信息")
|
||
enforcer.AddPolicy("user", "/x/feedback", "PUT", "更新反馈信息")
|
||
enforcer.AddPolicy("user", "/x/feedback/*", "PUT", "反馈信息处理")
|
||
//enforcer.AddPolicy("user", "/x/feedback/*", "DELETE", "删除反馈信息")*
|
||
enforcer.AddPolicy("user", "/x/feedback/*", "GET", "查询反馈详情")
|
||
|
||
// 任务
|
||
enforcer.AddPolicy("user", "/x/task/getLoginTaskList", "GET", "获取任务列表(已登录)")
|
||
enforcer.AddPolicy("user", "/x/task/get", "POST", "领取任务")
|
||
|
||
}
|
||
// 门店
|
||
{
|
||
|
||
// 门店:修改
|
||
|
||
// 奖励类型
|
||
enforcer.AddPolicy("store", "/x/rewardType", "GET", "获取奖励类型列表")
|
||
enforcer.AddPolicy("store", "/x/rewardType", "POST", "添加奖励类型")
|
||
enforcer.AddPolicy("store", "/x/rewardType", "PUT", "更新奖励类型")
|
||
enforcer.AddPolicy("store", "/x/rewardType/*", "DELETE", "删除奖励类型")
|
||
|
||
enforcer.AddPolicy("store", "/x/reward", "GET", "获取奖励列表")
|
||
enforcer.AddPolicy("store", "/x/reward", "POST", "添加奖励")
|
||
enforcer.AddPolicy("store", "/x/reward", "PUT", "更新奖励")
|
||
enforcer.AddPolicy("store", "/x/reward/*", "DELETE", "删除奖励")
|
||
|
||
enforcer.AddPolicy("store", "/x/storeTaskReward", "POST", "添加门店任务奖励")
|
||
enforcer.AddPolicy("store", "/x/storeTaskReward/*", "DELETE", "删除门店任务奖励")
|
||
|
||
// 门店角色
|
||
enforcer.AddPolicy("store", "/x/store/role", "GET", "获取门店角色列表")
|
||
enforcer.AddPolicy("store", "/x/store/role", "POST", "添加门店角色")
|
||
enforcer.AddPolicy("store", "/x/store/role", "PUT", "更新门店角色")
|
||
enforcer.AddPolicy("store", "/x/store/role/*", "DELETE", "删除门店角色")
|
||
|
||
// 门店管理员(门店员工)
|
||
enforcer.AddPolicy("store", "/x/store/admin/info", "GET", "获取门店管理员信息")
|
||
enforcer.AddPolicy("store", "/x/store/admin", "GET", "获取门店管理员列表")
|
||
enforcer.AddPolicy("store", "/x/store/admin", "POST", "添加门店管理员")
|
||
enforcer.AddPolicy("store", "/x/store/admin", "PUT", "更新门店管理员")
|
||
enforcer.AddPolicy("store", "/x/store/admin/*", "DELETE", "删除门店管理员")
|
||
enforcer.AddPolicy("store", "/x/store/admin/password", "POST", "修改门店管理员密码")
|
||
|
||
// 门店桌面设置
|
||
enforcer.AddPolicy("store", "/x/desktop", "GET", "获取门店桌面设置")
|
||
enforcer.AddPolicy("store", "/x/desktop", "POST", "修改门店桌面设置")
|
||
|
||
enforcer.AddPolicy("guest", "/x/task/completed/list", "GET", "获取游戏列表")
|
||
|
||
}
|
||
// 商户
|
||
{
|
||
enforcer.AddPolicy("merchant", "/x/store", "GET", "根据商户 id 获取门店列表")
|
||
enforcer.AddPolicy("merchant", "/x/merchant/info", "GET", "获取商户信息")
|
||
}
|
||
|
||
// 管理员
|
||
{
|
||
// admin
|
||
enforcer.AddPolicy("admin", "/x/admin/info", "GET", "获取管理员用户信息")
|
||
enforcer.AddPolicy("admin", "/x/upload/game", "POST", "管理员上传游戏图标")
|
||
|
||
// role
|
||
enforcer.AddPolicy("admin", "/x/role", "GET", "管理员获取角色列表")
|
||
enforcer.AddPolicy("admin", "/x/role", "POST", "管理员添加角色")
|
||
enforcer.AddPolicy("admin", "/x/role", "PUT", "管理员更新角色")
|
||
enforcer.AddPolicy("admin", "/x/role", "DELETE", "管理员给角色分配权限")
|
||
enforcer.AddPolicy("admin", "/x/role/*", "DELETE", "管理员删除单个角色")
|
||
|
||
// merchant
|
||
enforcer.AddPolicy("admin", "/x/merchant", "GET", "管理员获取商户列表")
|
||
enforcer.AddPolicy("admin", "/x/merchant/audit", "POST", "管理员审核商户申请")
|
||
|
||
enforcer.AddPolicy("admin", "/x/game", "POST", "管理员添加游戏")
|
||
enforcer.AddPolicy("admin", "/x/game/*", "DELETE", "管理员删除游戏")
|
||
enforcer.AddPolicy("admin", "/x/game", "PUT", "管理员更新游戏")
|
||
|
||
// 任务
|
||
enforcer.AddPolicy("admin", "/x/task/selector", "GET", "管理员获取任务列表二级选择器")
|
||
|
||
// 用户:删除
|
||
enforcer.AddPolicy("admin", "/x/user/del/{id}", "DELETE", "删除用户")
|
||
}
|
||
instance = &myCasbin{Enforcer: enforcer}
|
||
|
||
})
|
||
glog.Infof(ctx, "init casbin success")
|
||
}
|
||
|
||
func GetMyCasbin() *myCasbin {
|
||
if instance == nil {
|
||
panic("casbin not init")
|
||
}
|
||
return instance
|
||
}
|
||
|
||
// HasPermission 判断给定的权限标识是否拥有访问指定 URL 和方法的权限。
|
||
//
|
||
// 参数:
|
||
// - permission: 权限标识(如角色名或用户 ID)
|
||
// - url: 请求的路径(如 "/api/user/list")
|
||
// - method: HTTP 请求方法(如 "GET", "POST")
|
||
//
|
||
// 返回:
|
||
// - access: 如果有权限则为 true;否则为 false。
|
||
// - 若校验过程中发生错误,将记录日志并返回 false。
|
||
func (m *myCasbin) HasPermission(permission, url, method string) (access bool) {
|
||
enforce, err := m.Enforcer.Enforce(permission, url, method)
|
||
if err != nil {
|
||
glog.Errorf(context.Background(), "enforce error: %v", err)
|
||
return
|
||
}
|
||
return enforce
|
||
}
|