can('manage-roles')){ $roles = Role::select('id', 'name', 'label','editable') ->where('created_by', creatorId()) ->when(request('name'), fn($q) => $q->where('name', 'like', '%' . request('name') . '%')) ->when(request('sort'), fn($q) => $q->orderBy(request('sort'), request('direction', 'asc'))) ->with(['users' => function($query) { $query->select('id', 'name')->limit(5); }]) ->withCount('permissions') ->paginate(request('per_page', 10)) ->withQueryString(); return Inertia::render('roles/index', [ 'roles' => $roles, ]); } else{ return back()->with('error', __('Permission denied')); } } public function create() { if(Auth::user()->can('create-roles')){ $allPermissions = Auth::user()->getAllPermissions()->select('id', 'name', 'label', 'add_on', 'module'); $permissions = $allPermissions->groupBy('add_on') ->filter(function ($addOnPermissions, $addOn) { return $addOn === 'general' || Module_is_active($addOn); }) ->map(function ($addOnPermissions) { return $addOnPermissions->groupBy('module'); }); return Inertia::render('roles/create', ['permissions' => $permissions]); } else{ return back()->with('error', __('Permission denied')); } } public function store(StoreRoleRequest $request) { if(Auth::user()->can('create-roles')){ $role = new Role(); $role->name = $request->name; $role->label = $request->label; $role->created_by = creatorId(); $role->save(); $role->syncPermissions($request->permissions ?? []); return redirect()->route('roles.index')->with('success', __('The role has been created successfully.')); } else{ return redirect()->route('roles.index')->with('error', __('Permission denied')); } } public function edit(Role $role) { if(Auth::user()->can('edit-roles')){ $allPermissions = Auth::user()->getAllPermissions()->select('id', 'name', 'label', 'add_on', 'module','editable'); $permissions = $allPermissions->groupBy('add_on') ->filter(function ($addOnPermissions, $addOn) { return $addOn === 'general' || Module_is_active($addOn); }) ->map(function ($addOnPermissions) { return $addOnPermissions->groupBy('module'); }); $rolePermissions = $role->permissions->pluck('name')->toArray(); return Inertia::render('roles/edit', [ 'role' => $role, 'permissions' => $permissions, 'rolePermissions' => $rolePermissions ]); } else{ return back()->with('error', __('Permission denied')); } } public function update(UpdateRoleRequest $request, Role $role) { if(Auth::user()->can('edit-roles')){ $role->update([ 'name' => $request->name, 'label' => $request->label ]); $role->syncPermissions($request->permissions ?? []); return redirect()->route('roles.index')->with('success', __('The role details are updated successfully.')); } else{ return redirect()->route('roles.index')->with('error', __('Permission denied')); } } public function destroy(Role $role) { if(Auth::user()->can('delete-roles')){ if($role->editable == 0){ return redirect()->route('roles.index')->with('error', __('This role is not editable')); } $role->delete(); return redirect()->route('roles.index')->with('success', __('The role has been deleted.')); } else{ return redirect()->route('roles.index')->with('error', __('Permission denied')); } } }