mycasbin.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package mycasbin
  2. import (
  3. "log"
  4. "github.com/casbin/casbin/v2"
  5. "github.com/casbin/casbin/v2/model"
  6. gormAdapter "github.com/casbin/gorm-adapter/v3"
  7. _ "github.com/go-sql-driver/mysql"
  8. "device-manage/common/global"
  9. )
  10. // Initialize the model from a string.
  11. var text = `
  12. [request_definition]
  13. r = sub, obj, act
  14. [policy_definition]
  15. p = sub, obj, act
  16. [policy_effect]
  17. e = some(where (p.eft == allow))
  18. [matchers]
  19. m = r.sub == p.sub && (keyMatch2(r.obj, p.obj) || keyMatch(r.obj, p.obj)) && (r.act == p.act || p.act == "*")
  20. `
  21. func Setup() {
  22. Apter, err := gormAdapter.NewAdapterByDBUsePrefix(global.Eloquent, "sys_")
  23. if err != nil {
  24. panic(err)
  25. }
  26. m, err := model.NewModelFromString(text)
  27. if err != nil {
  28. panic(err)
  29. }
  30. e, err := casbin.NewSyncedEnforcer(m, Apter)
  31. if err != nil {
  32. panic(err)
  33. }
  34. err = e.LoadPolicy()
  35. if err != nil {
  36. panic(err)
  37. }
  38. global.CasbinEnforcer = e
  39. }
  40. func Casbin() *casbin.SyncedEnforcer {
  41. return global.CasbinEnforcer
  42. }
  43. func LoadPolicy() (*casbin.SyncedEnforcer, error) {
  44. if err := global.CasbinEnforcer.LoadPolicy(); err == nil {
  45. return global.CasbinEnforcer, err
  46. } else {
  47. log.Printf("casbin rbac_model or policy init error, message: %v \r\n", err.Error())
  48. return nil, err
  49. }
  50. }