RoleController.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\User;
  5. use Exception;
  6. use Illuminate\Contracts\Foundation\Application;
  7. use Illuminate\Contracts\View\Factory;
  8. use Illuminate\Contracts\View\View;
  9. use Illuminate\Http\RedirectResponse;
  10. use Illuminate\Http\Request;
  11. use Spatie\Permission\Models\Permission;
  12. use Spatie\Permission\Models\Role;
  13. class RoleController extends Controller
  14. {
  15. /**
  16. * Display a listing of the resource.
  17. *
  18. * @param Request $request
  19. * @return mixed
  20. * @throws Exception
  21. */
  22. public function index(Request $request)
  23. {
  24. //datatables
  25. if ($request->ajax()) {
  26. return $this->dataTableQuery();
  27. }
  28. $html = $this->dataTable();
  29. return view('admin.roles.index', compact('html'));
  30. }
  31. /**
  32. * Show the form for creating a new resource.
  33. *
  34. * @return Application|Factory|View
  35. */
  36. public function create()
  37. {
  38. $permissions = Permission::all();
  39. return view('admin.roles.edit', compact('permissions'));
  40. }
  41. /**
  42. * Store a newly created resource in storage.
  43. *
  44. * @return RedirectResponse
  45. */
  46. public function store(Request $request): RedirectResponse
  47. {
  48. $role = Role::create([
  49. 'name' => $request->name,
  50. 'color' => $request->color
  51. ]);
  52. if ($request->permissions) {
  53. $role->givePermissionTo($request->permissions);
  54. }
  55. return redirect()
  56. ->route('admin.roles.index')
  57. ->with('success', __('Role saved'));
  58. }
  59. /**
  60. * Display the specified resource.
  61. */
  62. public function show()
  63. {
  64. abort(404);
  65. }
  66. /**
  67. * Show the form for editing the specified resource.
  68. *
  69. * @param Role $role
  70. * @return Application|Factory|View
  71. */
  72. public function edit(Role $role)
  73. {
  74. $permissions = Permission::all();
  75. return view('admin.roles.edit', compact('role', 'permissions'));
  76. }
  77. /**
  78. * Update the specified resource in storage.
  79. *
  80. * @param Role $role
  81. * @return RedirectResponse
  82. */
  83. public function update(Request $request, Role $role)
  84. {
  85. if ($request->permissions) {
  86. if($role->id != 1){ //disable admin permissions change
  87. $role->syncPermissions($request->permissions);
  88. }
  89. }
  90. //if($role->id == 1 || $role->id == 3 || $role->id == 4){ //dont let the user change the names of these roles
  91. // $role->update([
  92. // 'color' => $request->color
  93. // ]);
  94. //}else{
  95. $role->update([
  96. 'name' => $request->name,
  97. 'color' => $request->color
  98. ]);
  99. //}
  100. //if($role->id == 1){
  101. // return redirect()->route('admin.roles.index')->with('success', __('Role updated. Name and Permissions of this Role cannot be changed'));
  102. //}elseif($role->id == 4 || $role->id == 3){
  103. // return redirect()->route('admin.roles.index')->with('success', __('Role updated. Name of this Role cannot be changed'));
  104. // }else{
  105. return redirect()
  106. ->route('admin.roles.index')
  107. ->with('success', __('Role saved'));
  108. //}
  109. }
  110. /**
  111. * Remove the specified resource from storage.
  112. *
  113. * @return RedirectResponse
  114. */
  115. public function destroy(Role $role)
  116. {
  117. if($role->id == 1 || $role->id == 3 || $role->id == 4){ //cannot delete the hard coded roles
  118. return back()->with("error","You cannot delete that role");
  119. }
  120. $users = User::role($role)->get();
  121. foreach($users as $user){
  122. //$user->syncRoles(['Member']);
  123. $user->syncRoles(4);
  124. }
  125. $role->delete();
  126. return redirect()
  127. ->route('admin.roles.index')
  128. ->with('success', __('Role removed'));
  129. }
  130. /**
  131. * @return mixed
  132. * @throws Exception
  133. */
  134. public function dataTable()
  135. {
  136. $query = Role::query()->withCount(['users', 'permissions']);
  137. return datatables($query)
  138. ->editColumn('id', function (Role $role) {
  139. return $role->id;
  140. })
  141. ->addColumn('actions', function (Role $role) {
  142. return '
  143. <a title="Edit" href="'.route("admin.roles.edit", $role).'" class="btn btn-sm btn-info"><i
  144. class="fa fas fa-edit"></i></a>
  145. <form class="d-inline" method="post" action="'.route("admin.roles.destroy", $role).'">
  146. ' . csrf_field() . '
  147. ' . method_field("DELETE") . '
  148. <button title="Delete" type="submit" class="btn btn-sm btn-danger confirm"><i
  149. class="fa fas fa-trash"></i></button>
  150. </form>
  151. ';
  152. })
  153. ->editColumn('name', function (Role $role) {
  154. return "<span style=\"color: $role->color\">$role->name</span>";
  155. })
  156. ->editColumn('usercount', function ($query) {
  157. return $query->users_count;
  158. })
  159. ->editColumn('permissionscount', function ($query){
  160. return $query->permissions_count;
  161. })
  162. ->rawColumns(['actions', 'name'])
  163. ->make(true);
  164. }
  165. }