RoleController.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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 Log;
  9. use Spatie\Permission\Models\Permission;
  10. use Spatie\Permission\Models\Role;
  11. class RoleController extends Controller
  12. {
  13. public function index()
  14. {
  15. return view('admin.role.index', ['roles' => Role::with('permissions')->paginate(15)]);
  16. }
  17. public function store(RoleRequest $request): RedirectResponse
  18. {
  19. if ($role = Role::create($request->only(['name', 'description']))) {
  20. $role->givePermissionTo($request->input('permissions') ?? []);
  21. return redirect()->route('admin.role.edit', $role)->with('successMsg', trans('common.success_item', ['attribute' => trans('common.add')]));
  22. }
  23. return redirect()->back()->withInput()->withErrors(trans('common.failed_item', ['attribute' => trans('common.add')]));
  24. }
  25. public function create()
  26. {
  27. return view('admin.role.info', ['permissions' => Permission::all()->pluck('description', 'name')]);
  28. }
  29. public function edit(Role $role)
  30. {
  31. return view('admin.role.info', [
  32. 'role' => $role->load('permissions'),
  33. 'permissions' => Permission::all()->pluck('description', 'name'),
  34. ]);
  35. }
  36. public function update(RoleRequest $request, Role $role): RedirectResponse
  37. {
  38. if ($role->name === 'Super Admin') {
  39. return redirect()->back()->withInput()->withErrors(trans('admin.role.modify_admin_error'));
  40. }
  41. if ($role->update($request->only(['name', 'description']))) {
  42. $role->syncPermissions($request->input('permissions') ?: []);
  43. return redirect()->back()->with('successMsg', trans('common.success_item', ['attribute' => trans('common.edit')]));
  44. }
  45. return redirect()->back()->withInput()->withErrors(trans('common.failed_item', ['attribute' => trans('common.edit')]));
  46. }
  47. public function destroy(Role $role): JsonResponse
  48. {
  49. try {
  50. if ($role->name === 'Super Admin') {
  51. return response()->json(['status' => 'fail', 'message' => trans('admin.role.modify_admin_error')]);
  52. }
  53. $role->delete();
  54. } catch (Exception $e) {
  55. Log::error(trans('common.error_action_item', ['action' => trans('common.delete'), 'attribute' => trans('model.role.attribute')]).': '.$e->getMessage());
  56. return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
  57. }
  58. return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
  59. }
  60. }