Skip to content

Commit 1cfa621

Browse files
committed
update has All Roles function
1 parent ab04e3a commit 1cfa621

File tree

2 files changed

+40
-12
lines changed

2 files changed

+40
-12
lines changed

src/Traits/HasPermissions.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,33 @@ public function hasAnyPermission(...$permissions): bool
281281
return false;
282282
}
283283

284+
/**
285+
* Determine if the model has all of the given permissions(s).
286+
*
287+
* @param $permissions
288+
*
289+
* @return bool
290+
* @throws \ReflectionException
291+
*/
292+
public function hasAllPermissions(... $permissions): bool
293+
{
294+
295+
if (is_array($permissions[0])) {
296+
$permissions = $permissions[0];
297+
}
298+
299+
if (is_array($permissions) && count($permissions) === 1) {
300+
$permissions = explode('|', $permissions[0]);
301+
}
302+
303+
foreach ($permissions as $permission) {
304+
if (!$this->hasPermissionTo($permission)) {
305+
return false;
306+
}
307+
}
308+
return true;
309+
}
310+
284311
/**
285312
* Determine if the model has, via roles, the given permission.
286313
*

src/Traits/HasRoles.php

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ public function hasRole($roles): bool
145145
return $role instanceof Role ? $role->name : $role;
146146
});
147147

148-
return ! $roles->intersect($this->roles->pluck('name'))->isEmpty();
148+
return !$roles->intersect($this->roles->pluck('name'))->isEmpty();
149149
}
150150

151151
/**
@@ -163,25 +163,26 @@ public function hasAnyRole($roles): bool
163163
/**
164164
* Determine if the model has all of the given role(s).
165165
*
166-
* @param string|Role|\Illuminate\Support\Collection $roles
166+
* @param $roles
167167
*
168168
* @return bool
169169
*/
170-
public function hasAllRoles($roles): bool
170+
public function hasAllRoles(... $roles): bool
171171
{
172-
if (\is_string($roles) && false !== strpos($roles, '|')) {
173-
$roles = \explode('|', $roles);
172+
if (is_array($roles[0])) {
173+
$roles = $roles[0];
174174
}
175175

176-
if (\is_string($roles) || $roles instanceof Role) {
177-
return $this->hasRole($roles);
176+
if (is_array($roles) && count($roles) === 1) {
177+
$roles = explode('|', $roles[0]);
178178
}
179179

180-
$roles = \collect()->make($roles)->map(function ($role) {
181-
return $role instanceof Role ? $role->name : $role;
182-
});
183-
184-
return $roles->intersect($this->roles->pluck('name')) == $roles;
180+
foreach ($roles as $role) {
181+
if (!$this->hasRole($role)) {
182+
return false;
183+
}
184+
}
185+
return true;
185186
}
186187

187188
/**

0 commit comments

Comments
 (0)