• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

php-casbin / php-casbin / 11444189732

21 Oct 2024 04:08PM UTC coverage: 94.006% (+0.2%) from 93.837%
11444189732

push

github

web-flow
Merge pull request #167 from php-casbin/4.x

BREAKING CHANGE: Upgrade the minimum PHP version to 8.0.

716 of 758 new or added lines in 23 files covered. (94.46%)

10 existing lines in 4 files now uncovered.

1976 of 2102 relevant lines covered (94.01%)

134.86 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

85.29
/src/Rbac/DefaultRoleManager/ConditionalDomainManager.php
1
<?php
2

3
declare(strict_types=1);
4

5
namespace Casbin\Rbac\DefaultRoleManager;
6

7
use Casbin\Rbac\DefaultRoleManager\Traits\DomainManager as DomainManagerTrait;
8
use Closure;
9

10
/**
11
 * Class ConditionalDomainManager.
12
 * Provides a default implementation for the ConditionalRoleManager interface with domain support.
13
 *
14
 * @author 1692898084@qq.com
15
 */
16
class ConditionalDomainManager extends ConditionalRoleManager
17
{
18
    use DomainManagerTrait;
19

20
    /**
21
     * @var array<string, ConditionalRoleManager>
22
     */
23
    protected array $rmMap = [];
24

25
    /**
26
     * ConditionalDomainManager constructor.
27
     * 
28
     * @param int $maxHierarchyLevel
29
     */
30
    public function __construct(int $maxHierarchyLevel)
31
    {
32
        parent::__construct($maxHierarchyLevel);
24✔
33
    }
34

35
    /**
36
     * Gets the RoleManager for the given domain.
37
     *
38
     * @param string $domain
39
     * @param bool $store
40
     * @return ConditionalRoleManager
41
     */
42
    public function &getRoleManager(string $domain, bool $store): ConditionalRoleManager
43
    {
44
        if (isset($this->rmMap[$domain])) {
24✔
45
            return $this->rmMap[$domain];
24✔
46
        }
47

48
        $rm = new ConditionalRoleManager($this->maxHierarchyLevel, $this->matchingFunc);
24✔
49
        if ($store) {
24✔
50
            $this->rmMap[$domain] = $rm;
24✔
51
        }
52
        if (!is_null($this->domainMatchingFunc)) {
24✔
53
            foreach ($this->rmMap as $domain2 => &$rm2) {
6✔
54
                if ($domain !== $domain2 && $this->match($domain, $domain2)) {
6✔
55
                    $rm->copyFrom($rm2);
6✔
56
                }
57
            }
58
        }
59

60
        return $rm;
24✔
61
    }
62

63
    /**
64
     * Adds the inheritance link between role: name1 and role: name2.
65
     * aka role: name1 inherits role: name2.
66
     * domain is a prefix to the roles.
67
     *
68
     * @param string $name1
69
     * @param string $name2
70
     * @param string ...$domains
71
     */
72
    public function addLink(string $name1, string $name2, string ...$domains): void
73
    {
74
        $domain = $this->getDomain(...$domains);
24✔
75
        $rm = &$this->getRoleManager($domain, true);
24✔
76
        $rm->addLink($name1, $name2);
24✔
77

78
        $this->rangeAffectedRoleManagers($domain, function (&$rm) use ($name1, $name2) {
24✔
NEW
79
            $rm->addLink($name1, $name2);
×
80
        });
24✔
81
    }
82

83
    /**
84
     * Deletes the inheritance link between role: name1 and role: name2.
85
     * aka role: name1 does not inherit role: name2 any more.
86
     * domain is a prefix to the roles.
87
     *
88
     * @param string $name1
89
     * @param string $name2
90
     * @param string ...$domains
91
     */
92
    public function deleteLink(string $name1, string $name2, string ...$domains): void
93
    {
94
        $domain = $this->getDomain(...$domains);
6✔
95
        $rm = &$this->getRoleManager($domain, true);
6✔
96
        $rm->deleteLink($name1, $name2);
6✔
97

98
        $this->rangeAffectedRoleManagers($domain, function (&$rm) use ($name1, $name2) {
6✔
99
            $rm->deleteLink($name1, $name2);
6✔
100
        });
6✔
101
    }
102

103
    /**
104
     * Determines whether role: name1 inherits role: name2.
105
     * domain is a prefix to the roles.
106
     *
107
     * @param string $name1
108
     * @param string $name2
109
     * @param string ...$domains
110
     *
111
     * @return bool
112
     */
113
    public function hasLink(string $name1, string $name2, string ...$domains): bool
114
    {
115
        $domain = $this->getDomain(...$domains);
24✔
116
        $rm = &$this->getRoleManager($domain, true);
24✔
117
        return $rm->hasLink($name1, $name2, ...$domains);
24✔
118
    }
119

120
    /**
121
     * AddLinkConditionFunc Add condition function fn for Link userName->roleName,
122
     * when fn returns true, Link is valid, otherwise invalid
123
     *
124
     * @param string $userName
125
     * @param string $roleName
126
     * @param Closure $linkConditionFunc
127
     */
128
    public function addLinkConditionFunc(string $userName, string $roleName, Closure $linkConditionFunc): void
129
    {
NEW
130
        foreach ($this->rmMap as $_ => &$rm) {
×
NEW
131
            $rm->addLinkConditionFunc($userName, $roleName, $linkConditionFunc);
×
132
        }
133
    }
134

135
    /**
136
     * AddDomainLinkConditionFunc Add condition function fn for Link userName-> {roleName, domain},
137
     * when fn returns true, Link is valid, otherwise invalid
138
     *
139
     * @param string $userName
140
     * @param string $roleName
141
     * @param string $domain
142
     * @param Closure $linkConditionFunc
143
     */
144
    public function addDomainLinkConditionFunc(string $userName, string $roleName, string $domain, Closure $linkConditionFunc): void
145
    {
146
        foreach ($this->rmMap as $_ => &$rm) {
24✔
147
            $rm->addDomainLinkConditionFunc($userName, $roleName, $domain, $linkConditionFunc);
24✔
148
        }
149
    }
150

151
    /**
152
     * SetLinkConditionFuncParams Sets the parameters of the condition function fn for Link userName->roleName
153
     *
154
     * @param string $userName
155
     * @param string $roleName
156
     * @param string ...$params
157
     */
158
    public function setLinkConditionFuncParams(string $userName, string $roleName, string ...$params): void
159
    {
NEW
160
        foreach ($this->rmMap as $_ => &$rm) {
×
NEW
161
            $rm->setLinkConditionFuncParams($userName, $roleName, ...$params);
×
162
        }
163
    }
164

165
    /**
166
     * SetDomainLinkConditionFuncParams Sets the parameters of the condition function fn
167
     * for Link userName->{roleName, domain}
168
     *
169
     * @param string $userName
170
     * @param string $roleName
171
     * @param string $domain
172
     * @param string ...$params
173
     */
174
    public function setDomainLinkConditionFuncParams(string $userName, string $roleName, string $domain, string ...$params): void
175
    {
176
        foreach ($this->rmMap as $_ => &$rm) {
24✔
177
            $rm->setDomainLinkConditionFuncParams($userName, $roleName, $domain, ...$params);
24✔
178
        }
179
    }
180
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc