namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Models\Role; use App\Models\Permission; use Illuminate\Http\Request; use Illuminate\Support\Str; class RoleController extends Controller { public function index() { $roles = Role::withCount('admins')->orderBy('name')->get(); $permissions = Permission::orderBy('group')->orderBy('name')->get()->groupBy('group'); return view('admin.roles.index', compact('roles', 'permissions')); } public function store(Request $request) { $request->validate([ 'name' => 'required|string|max:50|unique:roles', 'description' => 'nullable|string', 'permissions' => 'required|array', 'permissions.*' => 'exists:permissions,id', ]); $role = Role::create([ 'name' => $request->name, 'slug' => Str::slug($request->name), 'description' => $request->description, 'is_system' => false, ]); $role->permissions()->sync($request->permissions); // Log activity auth()->guard('admin')->user()->logActivity( 'Created role: ' . $role->name, ['role_id' => $role->id] ); return back()->with('success', 'Role created successfully.'); } public function update(Request $request, Role $role) { if ($role->is_system) { return back()->with('error', 'System roles cannot be modified.'); } $request->validate([ 'name' => 'required|string|max:50|unique:roles,name,' . $role->id, 'description' => 'nullable|string', 'permissions' => 'required|array', 'permissions.*' => 'exists:permissions,id', ]); $role->update([ 'name' => $request->name, 'slug' => Str::slug($request->name), 'description' => $request->description, ]); $role->permissions()->sync($request->permissions); // Log activity auth()->guard('admin')->user()->logActivity( 'Updated role: ' . $role->name, ['role_id' => $role->id] ); return back()->with('success', 'Role updated successfully.'); } public function destroy(Role $role) { if ($role->is_system) { return back()->with('error', 'System roles cannot be deleted.'); } if ($role->admins()->exists()) { return back()->with('error', 'Cannot delete role with assigned admins.'); } $name = $role->name; $role->delete(); // Log activity auth()->guard('admin')->user()->logActivity('Deleted role: ' . $name); return back()->with('success', 'Role deleted successfully.'); } public function permissions() { $permissions = Permission::orderBy('group')->orderBy('name')->get()->groupBy('group'); return view('admin.roles.permissions', compact('permissions')); } public function storePermission(Request $request) { $request->validate([ 'name' => 'required|string|max:100', 'group' => 'required|string|max:50', 'description' => 'nullable|string', ]); Permission::create([ 'name' => $request->name, 'slug' => Str::slug($request->name), 'group' => $request->group, 'description' => $request->description, ]); // Log activity auth()->guard('admin')->user()->logActivity( 'Created permission: ' . $request->name ); return back()->with('success', 'Permission created successfully.'); } public function updatePermission(Request $request, Permission $permission) { $request->validate([ 'name' => 'required|string|max:100|unique:permissions,name,' . $permission->id, 'group' => 'required|string|max:50', 'description' => 'nullable|string', ]); $permission->update([ 'name' => $request->name, 'slug' => Str::slug($request->name), 'group' => $request->group, 'description' => $request->description, ]); // Log activity auth()->guard('admin')->user()->logActivity( 'Updated permission: ' . $permission->name ); return back()->with('success', 'Permission updated successfully.'); } public function destroyPermission(Permission $permission) { if ($permission->roles()->exists()) { return back()->with('error', 'Cannot delete permission assigned to roles.'); } $name = $permission->name; $permission->delete(); // Log activity auth()->guard('admin')->user()->logActivity('Deleted permission: ' . $name); return back()->with('success', 'Permission deleted successfully.'); } }