first commit
This commit is contained in:
77
vendor/spatie/laravel-permission/src/Commands/Show.php
vendored
Normal file
77
vendor/spatie/laravel-permission/src/Commands/Show.php
vendored
Normal file
@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
namespace Spatie\Permission\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Collection;
|
||||
use Spatie\Permission\Contracts\Permission as PermissionContract;
|
||||
use Spatie\Permission\Contracts\Role as RoleContract;
|
||||
use Symfony\Component\Console\Helper\TableCell;
|
||||
|
||||
class Show extends Command
|
||||
{
|
||||
protected $signature = 'permission:show
|
||||
{guard? : The name of the guard}
|
||||
{style? : The display style (default|borderless|compact|box)}';
|
||||
|
||||
protected $description = 'Show a table of roles and permissions per guard';
|
||||
|
||||
public function handle()
|
||||
{
|
||||
$permissionClass = app(PermissionContract::class);
|
||||
$roleClass = app(RoleContract::class);
|
||||
$teamsEnabled = config('permission.teams');
|
||||
$team_key = config('permission.column_names.team_foreign_key');
|
||||
|
||||
$style = $this->argument('style') ?? 'default';
|
||||
$guard = $this->argument('guard');
|
||||
|
||||
if ($guard) {
|
||||
$guards = Collection::make([$guard]);
|
||||
} else {
|
||||
$guards = $permissionClass::pluck('guard_name')->merge($roleClass::pluck('guard_name'))->unique();
|
||||
}
|
||||
|
||||
foreach ($guards as $guard) {
|
||||
$this->info("Guard: $guard");
|
||||
|
||||
$roles = $roleClass::whereGuardName($guard)
|
||||
->with('permissions')
|
||||
->when($teamsEnabled, fn ($q) => $q->orderBy($team_key))
|
||||
->orderBy('name')->get()->mapWithKeys(fn ($role) => [
|
||||
$role->name.'_'.($teamsEnabled ? ($role->$team_key ?: '') : '') => [
|
||||
'permissions' => $role->permissions->pluck($permissionClass->getKeyName()),
|
||||
$team_key => $teamsEnabled ? $role->$team_key : null,
|
||||
],
|
||||
]);
|
||||
|
||||
$permissions = $permissionClass::whereGuardName($guard)->orderBy('name')->pluck('name', $permissionClass->getKeyName());
|
||||
|
||||
$body = $permissions->map(fn ($permission, $id) => $roles->map(
|
||||
fn (array $role_data) => $role_data['permissions']->contains($id) ? ' ✔' : ' ·'
|
||||
)->prepend($permission)
|
||||
);
|
||||
|
||||
if ($teamsEnabled) {
|
||||
$teams = $roles->groupBy($team_key)->values()->map(
|
||||
fn ($group, $id) => new TableCell('Team ID: '.($id ?: 'NULL'), ['colspan' => $group->count()])
|
||||
);
|
||||
}
|
||||
|
||||
$this->table(
|
||||
array_merge(
|
||||
isset($teams) ? $teams->prepend(new TableCell(''))->toArray() : [],
|
||||
$roles->keys()->map(function ($val) {
|
||||
$name = explode('_', $val);
|
||||
array_pop($name);
|
||||
|
||||
return implode('_', $name);
|
||||
})
|
||||
->prepend(new TableCell(''))->toArray(),
|
||||
),
|
||||
$body->toArray(),
|
||||
$style
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user