| Current Path : /var/www/html/reddsis/app/Http/Controllers/Backend/ |
| Current File : /var/www/html/reddsis/app/Http/Controllers/Backend/PermissionController.php |
<?php
namespace App\Http\Controllers\Backend;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\PermissionRegistrar;
class PermissionController extends Controller
{
public function index(Request $request)
{
$search = $request->get('search');
$guard = $request->get('guard_name');
$permissions = Permission::query()
->when($search, function ($q) use ($search) {
$q->where('name', 'like', "%{$search}%");
});
if (!empty($guard)) {
$permissions->where('guard_name', $guard);
}
$permissions = $permissions
->orderBy('name')
->paginate(10)->onEachSide(1)
->withQueryString();
$guards = array_keys(config('auth.guards'));
return view('backend.module.permission.index', [
'permissions' => $permissions,
'search' => $search,
'guards' => $guards,
'currentGuard' => $guard,
]);
}
public function create()
{
$guards = array_keys(config('auth.guards'));
return view('backend.module.permission.create', [
'guards' => $guards,
]);
}
public function store(Request $request)
{
$guards = array_keys(config('auth.guards'));
$guardName = $request->input('guard_name');
$validated = $request->validate([
'name' => 'required|string|max:255|unique:permissions,name,NULL,id,guard_name,' . $guardName,
'guard_name' => 'required|string|in:' . implode(',', $guards),
]);
Permission::create([
'name' => $validated['name'],
'guard_name' => $validated['guard_name'],
]);
app(PermissionRegistrar::class)->forgetCachedPermissions();
flash()->success('Permission created successfully!');
return redirect()->route('permissions.index');
}
public function edit(int $id)
{
$permission = Permission::findOrFail($id);
$guards = array_keys(config('auth.guards'));
return view('backend.module.permission.edit', [
'permission' => $permission,
'guards' => $guards,
]);
}
public function update(Request $request, int $id)
{
$permission = Permission::findOrFail($id);
$guards = array_keys(config('auth.guards'));
$guardName = $request->input('guard_name', $permission->guard_name);
$validated = $request->validate([
'name' => 'required|string|max:255|unique:permissions,name,' .
$permission->id .
',id,guard_name,' .
$guardName,
'guard_name' => 'required|string|in:' . implode(',', $guards),
]);
$permission->update([
'name' => $validated['name'],
'guard_name' => $validated['guard_name'],
]);
app(PermissionRegistrar::class)->forgetCachedPermissions();
flash()->success('Permission updated successfully!');
return redirect()->route('permissions.index');
}
public function destroy(int $id)
{
$permission = Permission::findOrFail($id);
$protected = [
'backend-user.view',
'backend-user.create',
'backend-user.update',
'backend-user.delete',
'activity-log.view',
'role.view',
'role.create',
'role.update',
'role.delete',
'permission.view',
'permission.create',
'permission.update',
'permission.delete',
];
if (in_array($permission->name, $protected, true)) {
flash()->error('Core permission cannot be deleted.');
return redirect()->route('permissions.index');
}
$permission->delete();
app(PermissionRegistrar::class)->forgetCachedPermissions();
flash()->success('Permission deleted successfully.');
return redirect()->route('permissions.index');
}
}