RoleController.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Requests\Admin\RoleRequest;
  5. use Exception;
  6. use Illuminate\Http\JsonResponse;
  7. use Illuminate\Http\RedirectResponse;
  8. use Spatie\Permission\Models\Permission;
  9. use Spatie\Permission\Models\Role;
  10. class RoleController extends Controller
  11. {
  12. public function index()
  13. {
  14. return view('admin.role.index', ['roles' => Role::with('permissions')->paginate(15)]);
  15. }
  16. public function store(RoleRequest $request): RedirectResponse
  17. {
  18. if ($role = Role::create($request->only(['name', 'description']))) {
  19. $role->givePermissionTo($request->input('permissions') ?? []);
  20. return redirect()->route('admin.role.edit', $role)->with('successMsg', '操作成功');
  21. }
  22. return redirect()->back()->withInput()->withErrors('操作失败');
  23. }
  24. public function create()
  25. {
  26. return view('admin.role.info', ['permissions' => Permission::all()->pluck('description', 'name')]);
  27. }
  28. public function edit(Role $role)
  29. {
  30. return view('admin.role.info', [
  31. 'role' => $role->load('permissions'),
  32. 'permissions' => Permission::all()->pluck('description', 'name'),
  33. ]);
  34. }
  35. public function update(RoleRequest $request, Role $role): RedirectResponse
  36. {
  37. if ($role->name === 'Super Admin') {
  38. return redirect()->back()->withInput()->withErrors('请勿修改超级管理员');
  39. }
  40. if ($role->update($request->only(['name', 'description']))) {
  41. $role->syncPermissions($request->input('permissions') ?: []);
  42. return redirect()->back()->with('successMsg', '操作成功');
  43. }
  44. return redirect()->back()->withInput()->withErrors('操作失败');
  45. }
  46. public function destroy(Role $role): JsonResponse
  47. {
  48. try {
  49. if ($role->name === 'Super Admin') {
  50. return response()->json(['status' => 'fail', 'message' => '请勿删除超级管理员']);
  51. }
  52. $role->delete();
  53. } catch (Exception $e) {
  54. return response()->json(['status' => 'fail', 'message' => '删除失败,'.$e->getMessage()]);
  55. }
  56. return response()->json(['status' => 'success', 'message' => '清理成功']);
  57. }
  58. }