Your IP : 216.73.216.79


Current Path : /var/www/html/reddsis/app/Http/Controllers/Backend/
Upload File :
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');
    }
}