ffd6a1002e
Also updates show roles on permission view to just those with permissions applied. Fixes rounded borders for lone permission rows. Moves "Everyone Else" handling from role to new class.
57 lines
1.4 KiB
PHP
57 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace BookStack\Auth\Permissions;
|
|
|
|
use BookStack\Auth\Role;
|
|
use BookStack\Entities\Models\Entity;
|
|
|
|
class PermissionFormData
|
|
{
|
|
protected Entity $entity;
|
|
|
|
public function __construct(Entity $entity)
|
|
{
|
|
$this->entity = $entity;
|
|
}
|
|
|
|
/**
|
|
* Get the roles with permissions assigned.
|
|
*/
|
|
public function rolesWithPermissions(): array
|
|
{
|
|
return $this->entity->permissions()
|
|
->with('role')
|
|
->where('role_id', '!=', 0)
|
|
->get(['id', 'role_id'])
|
|
->pluck('role')
|
|
->sortBy('display_name')
|
|
->all();
|
|
}
|
|
|
|
/**
|
|
* Get the roles that don't yet have specific permissions for the
|
|
* entity we're managing permissions for.
|
|
*/
|
|
public function rolesNotAssigned(): array
|
|
{
|
|
$assigned = $this->entity->permissions()->pluck('role_id');
|
|
return Role::query()
|
|
->where('system_name', '!=', 'admin')
|
|
->whereNotIn('id', $assigned)
|
|
->orderBy('display_name', 'asc')
|
|
->get()
|
|
->all();
|
|
}
|
|
|
|
/**
|
|
* Get the "Everyone Else" role entry.
|
|
*/
|
|
public function everyoneElseRole(): Role
|
|
{
|
|
return (new Role())->forceFill([
|
|
'id' => 0,
|
|
'display_name' => 'Everyone Else',
|
|
'description' => 'Set permissions for all roles not specifically overridden.'
|
|
]);
|
|
}
|
|
}
|