These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | /** |
||
3 | * RBAC implementation for HiPanel |
||
4 | * |
||
5 | * @link https://github.com/hiqdev/hipanel-rbac |
||
6 | * @package hipanel-rbac |
||
7 | * @license BSD-3-Clause |
||
8 | * @copyright Copyright (c) 2016-2017, HiQDev (http://hiqdev.com/) |
||
9 | */ |
||
10 | |||
11 | namespace hipanel\rbac; |
||
12 | |||
13 | use Yii; |
||
14 | use yii\base\InvalidParamException; |
||
15 | use yii\rbac\Assignment; |
||
16 | use yii\rbac\Item; |
||
17 | |||
18 | /** |
||
19 | * Smart setters for AuthManager. |
||
20 | * |
||
21 | * @author Andrii Vasyliev <[email protected]> |
||
22 | */ |
||
23 | trait SetterTrait |
||
24 | { |
||
25 | /** |
||
26 | * Set permission. |
||
27 | * @param string $name |
||
28 | * @param string $description |
||
29 | * @return Item |
||
30 | */ |
||
31 | 13 | public function setPermission($name, $description = null) |
|
32 | { |
||
33 | 13 | $permission = $this->getPermission($name) ?: $this->createPermission($name); |
|
34 | 13 | if ($description) { |
|
0 ignored issues
–
show
|
|||
35 | $permission->description = $description; |
||
36 | } |
||
37 | 13 | $this->add($permission); |
|
38 | |||
39 | 13 | return $permission; |
|
40 | } |
||
41 | |||
42 | /** |
||
43 | * Set role. |
||
44 | * @param string $name |
||
45 | * @param string $description |
||
46 | * @return Item |
||
47 | */ |
||
48 | 12 | public function setRole($name, $description = null) |
|
49 | { |
||
50 | 12 | $role = $this->getRole($name) ?: $this->createRole($name); |
|
51 | 12 | if ($description) { |
|
0 ignored issues
–
show
The expression
$description of type string|null is loosely compared to true ; this is ambiguous if the string can be empty. You might want to explicitly use !== null instead.
In PHP, under loose comparison (like For '' == false // true
'' == null // true
'ab' == false // false
'ab' == null // false
// It is often better to use strict comparison
'' === false // false
'' === null // false
Loading history...
|
|||
52 | $role->description = $description; |
||
53 | } |
||
54 | 12 | $this->add($role); |
|
55 | |||
56 | 12 | return $role; |
|
57 | } |
||
58 | |||
59 | /** |
||
60 | * Set child. |
||
61 | * @param string|Item $parent |
||
62 | * @param string|Item $child |
||
63 | * @return bool |
||
64 | */ |
||
65 | 12 | public function setChild($parent, $child) |
|
66 | { |
||
67 | 12 | View Code Duplication | if (is_string($parent)) { |
68 | 12 | $name = $parent; |
|
69 | 12 | $parent = $this->getItem($parent); |
|
70 | 12 | if (is_null($parent)) { |
|
71 | throw new InvalidParamException("Unknown parent:$name at setChild"); |
||
72 | } |
||
73 | } |
||
74 | 12 | View Code Duplication | if (is_string($child)) { |
75 | $name = $child; |
||
76 | $child = $this->getItem($child); |
||
77 | if (is_null($child)) { |
||
78 | throw new InvalidParamException("Unknown child:$name at setChild"); |
||
79 | } |
||
80 | } |
||
81 | 12 | if (isset($this->children[$parent->name][$child->name])) { |
|
0 ignored issues
–
show
The property
children does not exist. Did you maybe forget to declare it?
In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code: class MyClass { }
$x = new MyClass();
$x->foo = true;
Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion: class MyClass {
public $foo;
}
$x = new MyClass();
$x->foo = true;
Loading history...
|
|||
82 | return false; |
||
83 | } |
||
84 | |||
85 | 12 | return $this->addChild($parent, $child); |
|
86 | } |
||
87 | |||
88 | /** |
||
89 | * Assigns an item (role or permission) to a user. |
||
90 | * @param string|Item $item |
||
91 | * @param string|integer $userId the user ID (see [[\yii\web\User::id]]) |
||
92 | * @throws \Exception when given wrong item name |
||
93 | * @return Assignment|null the assignment object or `null` when assignment was not found by name |
||
94 | */ |
||
95 | 24 | public function setAssignment($item, $userId) |
|
96 | { |
||
97 | try { |
||
98 | 24 | if (is_string($item)) { |
|
99 | 24 | $item = $this->findItem($item); |
|
100 | } |
||
101 | } catch (InvalidParamException $e) { |
||
102 | Yii::warning('Role or permission "' . $item . '" does not exist'); |
||
103 | |||
104 | return null; |
||
105 | } |
||
106 | |||
107 | 24 | if (isset($this->assignments[$userId][$item->name])) { |
|
108 | return $this->assignments[$userId][$item->name]; |
||
0 ignored issues
–
show
The property
assignments does not exist. Did you maybe forget to declare it?
In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code: class MyClass { }
$x = new MyClass();
$x->foo = true;
Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion: class MyClass {
public $foo;
}
$x = new MyClass();
$x->foo = true;
Loading history...
|
|||
109 | } |
||
110 | |||
111 | 24 | return $this->assign($item, $userId); |
|
0 ignored issues
–
show
The method
assign() does not exist on hipanel\rbac\SetterTrait . Did you maybe mean setAssignment() ?
This check marks calls to methods that do not seem to exist on an object. This is most likely the result of a method being renamed without all references to it being renamed likewise.
Loading history...
|
|||
112 | } |
||
113 | |||
114 | 24 | protected function findItem($name, $description = null) |
|
115 | { |
||
116 | 24 | $item = $this->getItem($name); |
|
117 | 24 | if ($item) { |
|
118 | 24 | return $item; |
|
119 | } |
||
120 | 2 | if (strncmp($name, 'deny:', 5) === 0) { |
|
121 | 2 | return $this->setPermission($name, $description); |
|
122 | } |
||
123 | |||
124 | throw new InvalidParamException("Unknown item:$name at findItem"); |
||
125 | } |
||
126 | |||
127 | /** |
||
128 | * Assigns items to a user. |
||
129 | * @param string|array $items |
||
130 | * @param string|integer $userId |
||
131 | */ |
||
132 | 10 | public function setAssignments($items, $userId) |
|
133 | { |
||
134 | 10 | if (is_string($items)) { |
|
135 | 10 | $items = explode(',', $items); |
|
136 | } |
||
137 | 10 | foreach ($items as $item) { |
|
138 | 10 | $this->setAssignment($item, $userId); |
|
139 | } |
||
140 | 10 | } |
|
141 | |||
142 | /** |
||
143 | * Returns all assignments in the system. |
||
144 | * @return array |
||
145 | */ |
||
146 | public function getAllAssignments() |
||
147 | { |
||
148 | return $this->assignments; |
||
149 | } |
||
150 | |||
151 | /** |
||
152 | * Returns all items in the system. |
||
153 | * @return array |
||
154 | */ |
||
155 | 24 | public function getAllItems() |
|
156 | { |
||
157 | 24 | return $this->items; |
|
0 ignored issues
–
show
The property
items does not exist. Did you maybe forget to declare it?
In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code: class MyClass { }
$x = new MyClass();
$x->foo = true;
Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion: class MyClass {
public $foo;
}
$x = new MyClass();
$x->foo = true;
Loading history...
|
|||
158 | } |
||
159 | } |
||
160 |
In PHP, under loose comparison (like
==
, or!=
, orswitch
conditions), values of different types might be equal.For
string
values, the empty string''
is a special case, in particular the following results might be unexpected: