Skip to content

Commit

Permalink
Added option to filter permissions by models (#47)
Browse files Browse the repository at this point in the history
Option to select guard names

Co-authored-by: Tharinda Rodrigo <[email protected]>
  • Loading branch information
tharindarodrigo and Tharinda Rodrigo authored Jun 17, 2023
1 parent 80c0f2a commit 6895734
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 26 deletions.
15 changes: 11 additions & 4 deletions config/filament-spatie-roles-permissions.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

return [

'preload_roles' => false,
'preload_roles' => true,

'preload_permissions' => false,

'navigation_section_group' => 'filament-spatie-roles-permissions::filament-spatie.section.roles_and_permissions', // Default uses language constant

'team_model' => \App\Models\Team::class,

/*
Expand All @@ -18,11 +18,18 @@
'roles' => true
],

'guard_names' => [
'web' => 'web',
'api' => 'api'
],

'default_guard_name' => null,

'generator' => [

'guard_names' => [
'web',
//'api'
'api'
],

'permission_affixes' => [
Expand Down
14 changes: 9 additions & 5 deletions src/Commands/Permission.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,7 @@ public function __construct()

public function handle(): void
{
$customModels = $this->getCustomModels();

$models = $this->getModels();

$classes = array_merge($customModels, $models);
$classes = $this->getAllModels();

$classes = array_diff($classes, $this->getExcludedModels());

Expand Down Expand Up @@ -235,4 +231,12 @@ private function extractNamespace($file)
}
return $ns;
}

public function getAllModels(): array
{
$models = $this->getModels();
$customModels = $this->getCustomModels();

return array_merge($models, $customModels);
}
}
38 changes: 28 additions & 10 deletions src/Resources/PermissionResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,17 @@
use Althinect\FilamentSpatieRolesPermissions\Resources\PermissionResource\Pages\ViewPermission;
use Althinect\FilamentSpatieRolesPermissions\Resources\PermissionResource\RelationManager\RoleRelationManager;
use Filament\Forms\Components\Card;
use Filament\Forms\Components\Checkbox;
use Filament\Forms\Components\Grid;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Resources\Form;
use Filament\Resources\Resource;
use Filament\Resources\Table;
use Filament\Tables\Actions\BulkAction;
use Filament\Tables\Columns\TextColumn;
use Illuminate\Database\Eloquent\Collection;
use Filament\Tables\Filters\Filter;
use Illuminate\Database\Eloquent\Builder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;

class PermissionResource extends Resource
{
Expand Down Expand Up @@ -58,21 +58,28 @@ public static function form(Form $form): Form
Grid::make(2)->schema([
TextInput::make('name')
->label(__('filament-spatie-roles-permissions::filament-spatie.field.name')),
TextInput::make('guard_name')
Select::make('guard_name')
->label(__('filament-spatie-roles-permissions::filament-spatie.field.guard_name'))
->datalist(config('filament-spatie-roles-permissions.generator.guard_names')),
->options(config('filament-spatie-roles-permissions.guard_names'))
->default(config('filament-spatie-roles-permissions.default_guard_name')),
Select::make('roles')
->multiple()
->label(__('filament-spatie-roles-permissions::filament-spatie.field.roles'))
->relationship('roles', 'name')
->preload(config('filament-spatie-roles-permissions.preload_roles'))
->preload(config('filament-spatie-roles-permissions.preload_roles', true))
])
])
]);
}

public static function table(Table $table): Table
{
$commands = new \Althinect\FilamentSpatieRolesPermissions\Commands\Permission();
$models = $commands->getAllModels();
$checkBoxes = array_map(function (\ReflectionClass $model) {
return Checkbox::make($model->getShortName());
}, $models);

return $table
->columns([
TextColumn::make('id')
Expand All @@ -86,7 +93,18 @@ public static function table(Table $table): Table
->searchable(),
])
->filters([
//
Filter::make('models')
->form($checkBoxes)
->query(function (Builder $query, array $data) {

return $query->where(function (Builder $query) use ($data) {
foreach ($data as $key => $value) {
if ($value) {
$query->orWhere('name', 'like', '%'.$key.'%');
}
}
});
})
]);
}

Expand All @@ -100,10 +118,10 @@ public static function getRelations(): array
public static function getPages(): array
{
return [
'index' => ListPermissions::route('/'),
'index' => ListPermissions::route('/'),
'create' => CreatePermission::route('/create'),
'edit' => EditPermission::route('/{record}/edit'),
'view' => ViewPermission::route('/{record}')
'edit' => EditPermission::route('/{record}/edit'),
'view' => ViewPermission::route('/{record}')
];
}
}
17 changes: 10 additions & 7 deletions src/Resources/RoleResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public static function shouldRegisterNavigation(): bool
{
return config('filament-spatie-roles-permissions.should_register_on_navigation.roles', true);
}

public static function getModel(): string
{
return config('permission.models.role', Role::class);
Expand Down Expand Up @@ -56,15 +57,17 @@ public static function form(Form $form): Form
->schema([
TextInput::make('name')
->label(__('filament-spatie-roles-permissions::filament-spatie.field.name')),
TextInput::make('guard_name')
Select::make('guard_name')
->label(__('filament-spatie-roles-permissions::filament-spatie.field.guard_name'))
->datalist(config('filament-spatie-roles-permissions.generator.guard_names')),
->options(config('filament-spatie-roles-permissions.guard_names'))
->default(config('filament-spatie-roles-permissions.default_guard_name')),
Select::make('permissions')
->multiple()
->label(__('filament-spatie-roles-permissions::filament-spatie.field.permissions'))
->relationship('permissions', 'name')
->preload(config('filament-spatie-roles-permissions.preload_permissions')),
Select::make(config('permission.team_foreign_key', 'team_id'))->label(__('filament-spatie-roles-permissions::filament-spatie.field.team'))
Select::make(config('permission.team_foreign_key', 'team_id'))
->label(__('filament-spatie-roles-permissions::filament-spatie.field.team'))
->hidden(!config('permission.teams', false))
->options(
fn() => config('filament-spatie-roles-permissions.team_model', App\Models\Team::class)::pluck('name', 'id')
Expand All @@ -91,7 +94,7 @@ public static function table(Table $table): Table
->searchable(),
])
->filters([
//

]);
}

Expand All @@ -105,10 +108,10 @@ public static function getRelations(): array
public static function getPages(): array
{
return [
'index' => ListRoles::route('/'),
'index' => ListRoles::route('/'),
'create' => CreateRole::route('/create'),
'edit' => EditRole::route('/{record}/edit'),
'view' => ViewRole::route('/{record}')
'edit' => EditRole::route('/{record}/edit'),
'view' => ViewRole::route('/{record}')
];
}
}

0 comments on commit 6895734

Please sign in to comment.