Initial commit
This commit is contained in:
109
app/Http/Controllers/AdminRoleController.php
Normal file
109
app/Http/Controllers/AdminRoleController.php
Normal file
@@ -0,0 +1,109 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
class AdminRoleController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$roles = Role::withCount('users')->orderBy('name')->paginate(15);
|
||||
|
||||
return view('admin.roles.index', [
|
||||
'roles' => $roles,
|
||||
]);
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('admin.roles.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'name' => ['required', 'string', 'max:255', Rule::unique('roles', 'name')],
|
||||
'description' => ['nullable', 'string', 'max:255'],
|
||||
]);
|
||||
|
||||
Role::create([
|
||||
'name' => $validated['name'],
|
||||
'guard_name' => 'web',
|
||||
'description' => $validated['description'] ?? null,
|
||||
]);
|
||||
|
||||
return redirect()->route('admin.roles.index')->with('status', __('Role created.'));
|
||||
}
|
||||
|
||||
public function show(Role $role, Request $request)
|
||||
{
|
||||
$search = $request->string('search')->toString();
|
||||
|
||||
$usersQuery = $role->users()->orderBy('name');
|
||||
|
||||
if ($search) {
|
||||
$usersQuery->where(function ($q) use ($search) {
|
||||
$q->where('name', 'like', "%{$search}%")
|
||||
->orWhere('email', 'like', "%{$search}%");
|
||||
});
|
||||
}
|
||||
|
||||
$users = $usersQuery->paginate(15)->withQueryString();
|
||||
|
||||
$availableUsers = User::orderBy('name')->select('id', 'name', 'email')->get();
|
||||
|
||||
return view('admin.roles.show', [
|
||||
'role' => $role,
|
||||
'users' => $users,
|
||||
'availableUsers' => $availableUsers,
|
||||
'search' => $search,
|
||||
]);
|
||||
}
|
||||
|
||||
public function edit(Role $role)
|
||||
{
|
||||
return view('admin.roles.edit', [
|
||||
'role' => $role,
|
||||
]);
|
||||
}
|
||||
|
||||
public function update(Request $request, Role $role)
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'name' => ['required', 'string', 'max:255', Rule::unique('roles', 'name')->ignore($role->id)],
|
||||
'description' => ['nullable', 'string', 'max:255'],
|
||||
]);
|
||||
|
||||
$role->update($validated);
|
||||
|
||||
return redirect()->route('admin.roles.show', $role)->with('status', __('Role updated.'));
|
||||
}
|
||||
|
||||
public function assignUsers(Request $request, Role $role)
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'user_ids' => ['required', 'array'],
|
||||
'user_ids.*' => ['exists:users,id'],
|
||||
]);
|
||||
|
||||
$users = User::whereIn('id', $validated['user_ids'])->get();
|
||||
|
||||
foreach ($users as $user) {
|
||||
$user->assignRole($role);
|
||||
}
|
||||
|
||||
return redirect()->route('admin.roles.show', $role)->with('status', __('Users assigned to role.'));
|
||||
}
|
||||
|
||||
public function removeUser(Role $role, User $user)
|
||||
{
|
||||
$user->removeRole($role);
|
||||
|
||||
return redirect()->route('admin.roles.show', $role)->with('status', __('Role removed from user.'));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user