MCPcopy Create free account
hub / github.com/astercloud/aster / evaluatePolicies

Method evaluatePolicies

pkg/security/access_control.go:618–652  ·  view source on GitHub ↗

evaluatePolicies 评估策略

(userID, resource, action string, context map[string]any)

Source from the content-addressed store, hash-verified

616
617// evaluatePolicies 评估策略
618func (ac *AccessController) evaluatePolicies(userID, resource, action string, context map[string]any) *AccessDecision {
619 var applicablePolicies []*AccessPolicy
620
621 // 收集适用的策略
622 for _, policy := range ac.policies {
623 if !policy.Enabled {
624 continue
625 }
626
627 if ac.policyApplies(policy, userID, resource, action, context) {
628 applicablePolicies = append(applicablePolicies, policy)
629 }
630 }
631
632 if len(applicablePolicies) == 0 {
633 return nil
634 }
635
636 // 按优先级排序
637 sortedPolicies := ac.sortPoliciesByPriority(applicablePolicies)
638
639 // 应用策略
640 for _, policy := range sortedPolicies {
641 if ac.evaluatePolicyConditions(policy.Conditions, userID, resource, action, context) {
642 return &AccessDecision{
643 Allowed: policy.Effect == PolicyEffectAllow,
644 Effect: policy.Effect,
645 Reason: fmt.Sprintf("Policy %s (%s) applies", policy.ID, policy.Name),
646 Policies: []string{policy.ID},
647 }
648 }
649 }
650
651 return nil
652}
653
654// policyApplies 检查策略是否适用
655func (ac *AccessController) policyApplies(policy *AccessPolicy, userID, resource, action string, context map[string]any) bool {

Callers 1

CheckPermissionMethod · 0.95

Calls 3

policyAppliesMethod · 0.95

Tested by

no test coverage detected