Viewing file: Show.php (2.97 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?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, function ($q) use ($team_key) { $q->orderBy($team_key); }) ->orderBy('name')->get()->mapWithKeys(function ($role) use ($teamsEnabled, $team_key) { return [$role->name.'_'.($teamsEnabled ? ($role->$team_key ?: '') : '') => [ 'permissions' => $role->permissions->pluck('id'), $team_key => $teamsEnabled ? $role->$team_key : null, ]]; });
$permissions = $permissionClass::whereGuardName($guard)->orderBy('name')->pluck('name', 'id');
$body = $permissions->map(function ($permission, $id) use ($roles) { return $roles->map(function (array $role_data) use ($id) { return $role_data['permissions']->contains($id) ? ' ✔' : ' ·'; })->prepend($permission); });
if ($teamsEnabled) { $teams = $roles->groupBy($team_key)->values()->map(function ($group, $id) { return 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('')->toArray(), ]), $body->toArray(), $style ); } } }
|