61 lines
1.2 KiB
Go
61 lines
1.2 KiB
Go
|
package mycasbin
|
||
|
|
||
|
import (
|
||
|
"log"
|
||
|
|
||
|
"github.com/casbin/casbin/v2"
|
||
|
"github.com/casbin/casbin/v2/model"
|
||
|
gormAdapter "github.com/casbin/gorm-adapter/v3"
|
||
|
_ "github.com/go-sql-driver/mysql"
|
||
|
|
||
|
"go-admin/common/global"
|
||
|
)
|
||
|
|
||
|
// Initialize the model from a string.
|
||
|
var text = `
|
||
|
[request_definition]
|
||
|
r = sub, obj, act
|
||
|
|
||
|
[policy_definition]
|
||
|
p = sub, obj, act
|
||
|
|
||
|
[policy_effect]
|
||
|
e = some(where (p.eft == allow))
|
||
|
|
||
|
[matchers]
|
||
|
m = r.sub == p.sub && (keyMatch2(r.obj, p.obj) || keyMatch(r.obj, p.obj)) && (r.act == p.act || p.act == "*")
|
||
|
`
|
||
|
|
||
|
func Setup() {
|
||
|
Apter, err := gormAdapter.NewAdapterByDBUsePrefix(global.Eloquent, "sys_")
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
m, err := model.NewModelFromString(text)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
e, err := casbin.NewSyncedEnforcer(m, Apter)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
err = e.LoadPolicy()
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
global.CasbinEnforcer = e
|
||
|
}
|
||
|
|
||
|
func Casbin() *casbin.SyncedEnforcer {
|
||
|
return global.CasbinEnforcer
|
||
|
}
|
||
|
|
||
|
func LoadPolicy() (*casbin.SyncedEnforcer, error) {
|
||
|
if err := global.CasbinEnforcer.LoadPolicy(); err == nil {
|
||
|
return global.CasbinEnforcer, err
|
||
|
} else {
|
||
|
log.Printf("casbin rbac_model or policy init error, message: %v \r\n", err.Error())
|
||
|
return nil, err
|
||
|
}
|
||
|
}
|