Skip to content

Commit

Permalink
Merge pull request #2382 from erikn69/patch-18
Browse files Browse the repository at this point in the history
[v6] getPermissionsViaRoles, hasPermissionViaRole must be used only by authenticable
  • Loading branch information
drbyte committed Mar 30, 2023
2 parents 56c068b + 29ec9ec commit b9d3013
Showing 1 changed file with 12 additions and 4 deletions.
16 changes: 12 additions & 4 deletions src/Traits/HasPermissions.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ trait HasPermissions
/** @var string */
private $permissionClass;

/** @var string */
/** @var string|false|null */
private $wildcardClass;

public static function bootHasPermissions()
Expand Down Expand Up @@ -61,7 +61,7 @@ protected function getWildcardClass()

$this->wildcardClass = false;

if (config('permission.enable_wildcard_permission', false)) {
if (config('permission.enable_wildcard_permission')) {
$this->wildcardClass = config('permission.wildcard_permission', WildcardPermission::class);

if (! is_subclass_of($this->wildcardClass, Wildcard::class)) {
Expand Down Expand Up @@ -101,7 +101,7 @@ public function scopePermission(Builder $query, $permissions): Builder
{
$permissions = $this->convertToPermissionModels($permissions);

$rolesWithPermissions = array_unique(array_reduce($permissions, function ($result, $permission) {
$rolesWithPermissions = is_a($this, Role::class) ? []: array_unique(array_reduce($permissions, function ($result, $permission) {
return array_merge($result, $permission->roles->all());
}, []));

Expand All @@ -111,7 +111,7 @@ public function scopePermission(Builder $query, $permissions): Builder
$key = (new $permissionClass())->getKeyName();
$subQuery->whereIn(config('permission.table_names.permissions').".$key", \array_column($permissions, $key));
});
if (count($rolesWithPermissions) > 0) {
if (count($rolesWithPermissions) > 0 && ! is_a($this, Role::class)) {
$query->orWhereHas('roles', function (Builder $subQuery) use ($rolesWithPermissions) {
$roleClass = $this->getRoleClass();
$key = (new $roleClass())->getKeyName();
Expand Down Expand Up @@ -287,6 +287,10 @@ public function hasAllPermissions(...$permissions): bool
*/
protected function hasPermissionViaRole(Permission $permission): bool
{
if (is_a($this, Role::class)) {
return false;
}

return $this->hasRole($permission->roles);
}

Expand All @@ -309,6 +313,10 @@ public function hasDirectPermission($permission): bool
*/
public function getPermissionsViaRoles(): Collection
{
if (is_a($this, Role::class) || is_a($this, Permission::class)) {
return collect();
}

return $this->loadMissing('roles', 'roles.permissions')
->roles->flatMap(function ($role) {
return $role->permissions;
Expand Down

0 comments on commit b9d3013

Please sign in to comment.