type Permission struct {
adapter *gormadapter.Adapter
enforcer *casbin.Enforcer
configPath string
}
func NewPermission(dbModel config.DbConfig, path string) *Permission {
p := &Permission{
configPath: path, // "pkg/config/rbac_model.conf"
}
connArgs := fmt.Sprintf("%s:%s@(%s:%s)/", dbModel.Username, dbModel.Password, dbModel.Host, dbModel.Port)
if a, err := gormadapter.NewAdapter("mysql", connArgs); err != nil {
panic(err)
} else {
p.adapter = a
if e, err := casbin.NewEnforcer(p.configPath, p.adapter, true); err != nil {
panic(err)
} else {
p.enforcer = e
}
}
return p
}
func GetPermission() *Permission {
onceNew.Do(func() {
PermissionService = NewPermission(config.GetMustConfig().Orgrimmar.DbConfig, config.GetMustConfig().Orgrimmar.CasbinPath)
})
return PermissionService
}
// 增加权限
func (p *Permission) AddPermissionParams(params ...string) (bool, error) {
var pm PermissionModel
l := len(params)
switch {
case l == 4 && params[0] == "p":
pm = p.make3PermissionModel("p", params[0], params[1], params[2])
case l == 3 && params[0] == "g":
pm = p.make2PermissionModel("g", params[0], params[1])
default:
return false, nil
}
return p.AddPermission(pm)
}
// Check 验证权限
func (p *Permission) Check(p1, p2, p3 string) (bool, error) {
return p.enforcer.Enforce(p1, p2, p3)
}
// RemovePolicy 删除策略 传入 p 对应的 v0 v1 v2 参数
func (p *Permission) RemovePolicy(params ...string) (bool, error) {
return p.enforcer.RemovePolicy(params)
}
......