2 Star 0 Fork 0

wuzheng0709 / backend-gopkg

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
mw_casbin.go 2.10 KB
一键复制 编辑 原始数据 按行查看 历史
HCY 提交于 2024-05-10 13:07 . edit pkg
package middleware
import (
"fmt"
"gitee.com/wuzheng0709/backend-gopkg/infrastructure/connector/orm"
"gitee.com/wuzheng0709/backend-gopkg/infrastructure/pkg/gin/log"
"gitee.com/wuzheng0709/backend-gopkg/infrastructure/pkg/toolfunc"
"github.com/casbin/casbin"
"github.com/gin-gonic/gin"
"gitee.com/wuzheng0709/backend-gopkg/infrastructure/pkg/code"
)
type AdminUserRole struct {
ID int64 `gorm:"column:id;primary_key;AUTO_INCREMENT" form:"id" json:"id"`
UserID int64 `gorm:"column:user_id;not null;"` // 管理员ID
RoleID int64 `gorm:"column:role_id;not null;"` // 角色ID
}
const (
PrefixUserID = "u_"
PrefixRoleID = "r_"
)
var enforcer *casbin.Enforcer
// 检查用户是否有权限
func CasbinCheckPermission(userID, url, methodtype string) (bool, error) {
log.Infof("检查权限:%v %v %v %v ", PrefixUserID+userID, url, methodtype, enforcer)
flag, err := enforcer.EnforceSafe(PrefixUserID+userID, url, methodtype)
if flag {
return flag, err
}
var adminsroles []AdminUserRole
orm.Find(orm.GetMysqlDB(), &AdminUserRole{UserID: toolfunc.String2Int64(userID)}, &adminsroles)
for _, adminsrole := range adminsroles {
flag, err = enforcer.EnforceSafe(PrefixRoleID+toolfunc.Int642String(adminsrole.RoleID), url, methodtype)
if flag {
return flag, err
}
}
return flag, err
}
// CasbinMiddleware casbin中间件
func CasbinMiddleware(skipper ...SkipperFunc) gin.HandlerFunc {
return func(c *gin.Context) {
if len(skipper) > 0 && skipper[0](c) {
c.Next()
return
}
var sub string
var obj, act string
obj = c.Request.URL.Path
method := c.Request.Method
switch method {
case "GET":
act = "read"
case "POST":
act = "write"
default:
c.Next()
return
}
sub = c.GetString("UID")
log.Infof("权限认证:%v %v %v", sub, obj, act)
if b, err := CasbinCheckPermission(sub, obj, act); err != nil {
c.JSON(500, gin.H{
"code": code.Crash_Error,
"msg": fmt.Sprintf("验证服务出现错误:%v", err),
})
c.Abort()
} else if !b {
c.JSON(400, gin.H{
"code": code.Token_Error,
"msg": "没有权限",
})
c.Abort()
}
c.Next()
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/wuzheng0709/backend-gopkg.git
git@gitee.com:wuzheng0709/backend-gopkg.git
wuzheng0709
backend-gopkg
backend-gopkg
v1.3.6

搜索帮助

344bd9b3 5694891 D2dac590 5694891