初始化项目框架,完成部分接口开发

This commit is contained in:
2025-07-10 21:04:29 +08:00
commit b2871ec0d2
168 changed files with 6399 additions and 0 deletions

106
utility/myCasbin/casbin.go Normal file
View 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
}