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

php-casbin / php-casbin / 15422853167

03 Jun 2025 04:34PM UTC coverage: 94.307% (-0.2%) from 94.485%
15422853167

push

github

leeqvip
refactor: Upgrade phpstan to level 8

52 of 63 new or added lines in 8 files covered. (82.54%)

2 existing lines in 1 file now uncovered.

1938 of 2055 relevant lines covered (94.31%)

231.19 hits per line

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

86.67
/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);
40✔
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])) {
40✔
45
            return $this->rmMap[$domain];
40✔
46
        }
47

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

60
        return $rm;
40✔
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);
40✔
75
        $rm = &$this->getRoleManager($domain, true);
40✔
76
        $rm->addLink($name1, $name2);
40✔
77

78
        $this->rangeAffectedRoleManagers($domain, static fn (&$rm) => $rm->addLink($name1, $name2));
40✔
79
    }
80

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

96
        $this->rangeAffectedRoleManagers($domain, static fn (&$rm) => $rm->deleteLink($name1, $name2));
10✔
97
    }
98

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

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

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

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

161
    /**
162
     * SetDomainLinkConditionFuncParams Sets the parameters of the condition function fn
163
     * for Link userName->{roleName, domain}
164
     *
165
     * @param string $userName
166
     * @param string $roleName
167
     * @param string $domain
168
     * @param string ...$params
169
     */
170
    public function setDomainLinkConditionFuncParams(string $userName, string $roleName, string $domain, string ...$params): void
171
    {
172
        foreach ($this->rmMap as $_ => &$rm) {
40✔
173
            $rm->setDomainLinkConditionFuncParams($userName, $roleName, $domain, ...$params);
40✔
174
        }
175
    }
176
}
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

© 2026 Coveralls, Inc