forked from casdoor/casdoor
feat: fix Data Missing From casbin_rule Table After Importing init_data.json (#4167)
This commit is contained in:
@@ -46,6 +46,8 @@ type InitData struct {
|
||||
Sessions []*Session `json:"sessions"`
|
||||
Subscriptions []*Subscription `json:"subscriptions"`
|
||||
Transactions []*Transaction `json:"transactions"`
|
||||
|
||||
EnforcerPolicies map[string][][]string `json:"enforcerPolicies"`
|
||||
}
|
||||
|
||||
var initDataNewOnly bool
|
||||
@@ -116,7 +118,8 @@ func InitFromFile() {
|
||||
initDefinedAdapter(adapter)
|
||||
}
|
||||
for _, enforcer := range initData.Enforcers {
|
||||
initDefinedEnforcer(enforcer)
|
||||
policies := initData.EnforcerPolicies[enforcer.GetId()]
|
||||
initDefinedEnforcer(enforcer, policies)
|
||||
}
|
||||
for _, plan := range initData.Plans {
|
||||
initDefinedPlan(plan)
|
||||
@@ -175,6 +178,8 @@ func readInitDataFromFile(filePath string) (*InitData, error) {
|
||||
Sessions: []*Session{},
|
||||
Subscriptions: []*Subscription{},
|
||||
Transactions: []*Transaction{},
|
||||
|
||||
EnforcerPolicies: map[string][][]string{},
|
||||
}
|
||||
err := util.JsonToStruct(s, data)
|
||||
if err != nil {
|
||||
@@ -694,7 +699,7 @@ func initDefinedAdapter(adapter *Adapter) {
|
||||
}
|
||||
}
|
||||
|
||||
func initDefinedEnforcer(enforcer *Enforcer) {
|
||||
func initDefinedEnforcer(enforcer *Enforcer, policies [][]string) {
|
||||
existed, err := getEnforcer(enforcer.Owner, enforcer.Name)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
@@ -716,6 +721,20 @@ func initDefinedEnforcer(enforcer *Enforcer) {
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
err = enforcer.InitEnforcer()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
_, err = enforcer.AddPolicies(policies)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = enforcer.SavePolicy()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func initDefinedPlan(plan *Plan) {
|
||||
|
||||
@@ -146,6 +146,16 @@ func writeInitDataToFile(filePath string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
enforcerPolicies := make(map[string][][]string)
|
||||
for _, enforcer := range enforcers {
|
||||
err = enforcer.InitEnforcer()
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
enforcerPolicies[enforcer.GetId()] = enforcer.GetPolicy()
|
||||
}
|
||||
|
||||
data := &InitData{
|
||||
Organizations: organizations,
|
||||
Applications: applications,
|
||||
@@ -172,6 +182,8 @@ func writeInitDataToFile(filePath string) error {
|
||||
Sessions: sessions,
|
||||
Subscriptions: subscriptions,
|
||||
Transactions: transactions,
|
||||
|
||||
EnforcerPolicies: enforcerPolicies,
|
||||
}
|
||||
|
||||
text := util.StructToJsonFormatted(data)
|
||||
|
||||
Reference in New Issue
Block a user