初始化项目框架,完成部分接口开发
This commit is contained in:
106
utility/myCasbin/casbin.go
Normal file
106
utility/myCasbin/casbin.go
Normal file
@ -0,0 +1,106 @@
|
||||
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.AuthorRoleCode, consts.UserRoleCode)
|
||||
enforcer.AddGroupingPolicy(consts.AdminRoleCode, consts.AuthorRoleCode)
|
||||
// guest
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// user
|
||||
{
|
||||
// book
|
||||
// chapter
|
||||
// feedback
|
||||
// user
|
||||
enforcer.AddPolicy("admin", "/user/info", "GET", "获取用户信息")
|
||||
}
|
||||
// author
|
||||
{
|
||||
// book
|
||||
enforcer.AddPolicy("admin", "/book", "GET", "获取图书列表")
|
||||
// chapter
|
||||
|
||||
// category
|
||||
enforcer.AddPolicy("admin", "/category", "GET", "获取分类列表")
|
||||
}
|
||||
|
||||
// admin
|
||||
{
|
||||
|
||||
// feedback
|
||||
enforcer.AddPolicy("admin", "/feedback", "GET", "获取反馈列表")
|
||||
// category
|
||||
enforcer.AddPolicy("admin", "/category", "POST", "创建分类")
|
||||
enforcer.AddPolicy("admin", "/category", "PUT", "更新分类")
|
||||
enforcer.AddPolicy("admin", "/category", "DELETE", "删除分类")
|
||||
// admin
|
||||
enforcer.AddPolicy("admin", "/admin/info", "GET", "获取管理员用户信息")
|
||||
}
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user