mirror of
https://github.com/casdoor/casdoor.git
synced 2025-05-22 18:25:47 +08:00
feat: restrict the model of application type resource permission (#2394)
This commit is contained in:
parent
4de716fef3
commit
e4208d7fd9
@ -18,7 +18,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/casbin/casbin/v2"
|
"github.com/casbin/casbin/v2"
|
||||||
"github.com/casbin/casbin/v2/config"
|
|
||||||
"github.com/casdoor/casdoor/util"
|
"github.com/casdoor/casdoor/util"
|
||||||
xormadapter "github.com/casdoor/xorm-adapter/v3"
|
xormadapter "github.com/casdoor/xorm-adapter/v3"
|
||||||
"github.com/xorm-io/core"
|
"github.com/xorm-io/core"
|
||||||
@ -254,16 +253,10 @@ func (enforcer *Enforcer) LoadModelCfg() error {
|
|||||||
return fmt.Errorf("the model: %s for enforcer: %s is not found", enforcer.Model, enforcer.GetId())
|
return fmt.Errorf("the model: %s for enforcer: %s is not found", enforcer.Model, enforcer.GetId())
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg, err := config.NewConfigFromText(model.ModelText)
|
enforcer.ModelCfg, err = getModelCfg(model)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
enforcer.ModelCfg = make(map[string]string)
|
|
||||||
enforcer.ModelCfg["p"] = cfg.String("policy_definition::p")
|
|
||||||
if cfg.String("role_definition::g") != "" {
|
|
||||||
enforcer.ModelCfg["g"] = cfg.String("role_definition::g")
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@ package object
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/casbin/casbin/v2/config"
|
||||||
"github.com/casbin/casbin/v2/model"
|
"github.com/casbin/casbin/v2/model"
|
||||||
"github.com/casdoor/casdoor/util"
|
"github.com/casdoor/casdoor/util"
|
||||||
"github.com/xorm-io/core"
|
"github.com/xorm-io/core"
|
||||||
@ -188,3 +189,17 @@ func (m *Model) initModel() error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getModelCfg(m *Model) (map[string]string, error) {
|
||||||
|
cfg, err := config.NewConfigFromText(m.ModelText)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
modelCfg := make(map[string]string)
|
||||||
|
modelCfg["p"] = cfg.String("policy_definition::p")
|
||||||
|
if cfg.String("role_definition::g") != "" {
|
||||||
|
modelCfg["g"] = cfg.String("role_definition::g")
|
||||||
|
}
|
||||||
|
return modelCfg, nil
|
||||||
|
}
|
||||||
|
@ -150,6 +150,21 @@ func UpdatePermission(id string, permission *Permission) (bool, error) {
|
|||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if permission.ResourceType == "Application" {
|
||||||
|
model, err := GetModel(util.GetId(owner, permission.Model))
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
modelCfg, err := getModelCfg(model)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(strings.Split(modelCfg["p"], ",")) != 3 {
|
||||||
|
return false, fmt.Errorf("the model: %s for permission: %s is not valid, application type resources need 3 size [policy_defination] model", permission.Model, permission.GetId())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
affected, err := ormer.Engine.ID(core.PK{owner, name}).AllCols().Update(permission)
|
affected, err := ormer.Engine.ID(core.PK{owner, name}).AllCols().Update(permission)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
|
Loading…
x
Reference in New Issue
Block a user