Initial commit

This commit is contained in:
2025-11-20 23:21:05 +08:00
commit 13bc6db529
378 changed files with 54527 additions and 0 deletions

View 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.'));
}
}