mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-08-31 01:35:56 +08:00
fix: the default policy for actions not matching any rule defaults to allow
This commit is contained in:
@@ -245,17 +245,38 @@ func (manager *SPolicyManager) allowWithoutCache(isAdmin bool, userCred mcclient
|
||||
log.Warningf("no policies fetched")
|
||||
return rbacutils.Deny
|
||||
}
|
||||
findMatchRule := false
|
||||
currentPriv := rbacutils.Deny
|
||||
for _, p := range policies {
|
||||
result := p.Allow(userCred, service, resource, action, extra...)
|
||||
if currentPriv.StricterThan(result) {
|
||||
currentPriv = result
|
||||
if !p.Match(userCred) {
|
||||
continue
|
||||
}
|
||||
rule := p.GetMatchRule(service, resource, action, extra...)
|
||||
if rule != nil {
|
||||
findMatchRule = true
|
||||
if currentPriv.StricterThan(rule.Result) {
|
||||
currentPriv = rule.Result
|
||||
}
|
||||
}
|
||||
// result := p.Allow(userCred, service, resource, action, extra...)
|
||||
// if currentPriv.StricterThan(result) {
|
||||
// currentPriv = result
|
||||
// }
|
||||
}
|
||||
if !isAdmin && manager.defaultPolicy != nil {
|
||||
result := manager.defaultPolicy.Allow(userCred, service, resource, action, extra...)
|
||||
if currentPriv.StricterThan(result) {
|
||||
currentPriv = result
|
||||
rule := manager.defaultPolicy.GetMatchRule(service, resource, action, extra...)
|
||||
if rule != nil {
|
||||
findMatchRule = true
|
||||
if currentPriv.StricterThan(rule.Result) {
|
||||
currentPriv = rule.Result
|
||||
}
|
||||
}
|
||||
}
|
||||
if !findMatchRule {
|
||||
if isAdmin {
|
||||
currentPriv = rbacutils.AdminAllow
|
||||
} else {
|
||||
currentPriv = rbacutils.OwnerAllow
|
||||
}
|
||||
}
|
||||
if consts.IsRbacDebug() {
|
||||
|
||||
@@ -457,7 +457,7 @@ func (policy *SRbacPolicy) Match(userCred mcclient.TokenCredential) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (policy *SRbacPolicy) Allow(userCred mcclient.TokenCredential, service, resource, action string, extra ...string) TRbacResult {
|
||||
/*func (policy *SRbacPolicy) Allow(userCred mcclient.TokenCredential, service, resource, action string, extra ...string) TRbacResult {
|
||||
if !policy.Match(userCred) {
|
||||
return Deny
|
||||
}
|
||||
@@ -466,4 +466,4 @@ func (policy *SRbacPolicy) Allow(userCred mcclient.TokenCredential, service, res
|
||||
return Deny
|
||||
}
|
||||
return rule.Result
|
||||
}
|
||||
}*/
|
||||
|
||||
Reference in New Issue
Block a user