Skip to content

Commit

Permalink
update has All Roles function
Browse files Browse the repository at this point in the history
  • Loading branch information
makladuxbert committed Jan 7, 2019
1 parent f423dc5 commit 8647fae
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 12 deletions.
27 changes: 27 additions & 0 deletions src/Traits/HasPermissions.php
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,33 @@ public function hasAnyPermission(...$permissions): bool
return false;
}

/**
* Determine if the model has all of the given permissions(s).
*
* @param $permissions
*
* @return bool
* @throws \ReflectionException
*/
public function hasAllPermissions(... $permissions): bool
{

if (is_array($permissions[0])) {
$permissions = $permissions[0];
}

if (is_array($permissions) && count($permissions) === 1) {
$permissions = explode('|', $permissions[0]);
}

foreach ($permissions as $permission) {
if (!$this->hasPermissionTo($permission)) {
return false;
}
}
return true;
}

/**
* Determine if the model has, via roles, the given permission.
*
Expand Down
25 changes: 13 additions & 12 deletions src/Traits/HasRoles.php
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ public function hasRole($roles): bool
return $role instanceof Role ? $role->name : $role;
});

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

/**
Expand All @@ -163,25 +163,26 @@ public function hasAnyRole($roles): bool
/**
* Determine if the model has all of the given role(s).
*
* @param string|Role|\Illuminate\Support\Collection $roles
* @param $roles
*
* @return bool
*/
public function hasAllRoles($roles): bool
public function hasAllRoles(... $roles): bool
{
if (\is_string($roles) && false !== strpos($roles, '|')) {
$roles = \explode('|', $roles);
if (is_array($roles[0])) {
$roles = $roles[0];
}

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

$roles = \collect()->make($roles)->map(function ($role) {
return $role instanceof Role ? $role->name : $role;
});

return $roles->intersect($this->roles->pluck('name')) == $roles;
foreach ($roles as $role) {
if (!$this->hasRole($role)) {
return false;
}
}
return true;
}

/**
Expand Down

0 comments on commit 8647fae

Please sign in to comment.