/app/Http/Controllers/RoleController.php

https://github.com/roladn/laravel-sentinel-crud-starter · PHP · 220 lines · 124 code · 38 blank · 58 comment · 12 complexity · bfc4f3095fa7ff0fac984a58af7cefe5 MD5 · raw file

  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests;
  4. use App\Http\Controllers\Controller;
  5. use App\Role;
  6. use Illuminate\Http\Request;
  7. use Carbon\Carbon;
  8. use Session;
  9. use Validator;
  10. use Sentinel;
  11. use Route;
  12. class RoleController extends Controller
  13. {
  14. protected function validator(Request $request)
  15. {
  16. return Validator::make($request->all(), [
  17. 'slug' => 'required|max:35|min:2|string',
  18. 'name' => 'required|max:35|min:2|string',
  19. ]);
  20. }
  21. /**
  22. * Display a listing of the resource.
  23. *
  24. * @return Response
  25. */
  26. public function index(Request $request)
  27. {
  28. $roles = Role::all();
  29. if ($request->is('api/*')) {
  30. return $roles;
  31. }
  32. return View('backEnd.roles.index', compact('roles'));
  33. }
  34. /**
  35. * Show the form for creating a new resource.
  36. *
  37. * @return Response
  38. */
  39. public function create()
  40. { $roles = Role::get()->pluck('name', 'id');
  41. return View('backEnd.roles.create',compact('roles'));
  42. }
  43. /**
  44. * Store a newly created resource in storage.
  45. *
  46. * @return Response
  47. */
  48. public function store(Request $request){
  49. if ($this->validator($request)->fails()) {
  50. return redirect()->back()
  51. ->withErrors($this->validator($request))
  52. ->withInput();
  53. }
  54. Role::create($request->all());
  55. Session::flash('message', 'Success! Role is created successfully.');
  56. Session::flash('status', 'success');
  57. return redirect('role');
  58. }
  59. /**
  60. * Display the specified resource.
  61. *
  62. * @param int $id
  63. *
  64. * @return Response
  65. */
  66. public function show($id)
  67. {
  68. $role = Role::findOrFail($id);
  69. return View('backEnd.roles.show', compact('role'));
  70. }
  71. /**
  72. * Show the form for editing the specified resource.
  73. *
  74. * @param int $id
  75. *
  76. * @return Response
  77. */
  78. public function edit($id)
  79. {
  80. $role = Role::findOrFail($id);
  81. return View('backEnd.roles.edit', compact('role'));
  82. }
  83. /**
  84. * Update the specified resource in storage.
  85. *
  86. * @param int $id
  87. *
  88. * @return Response
  89. */
  90. public function update($id, Request $request)
  91. {
  92. if ($this->validator($request)->fails()) {
  93. return redirect()->back()
  94. ->withErrors($this->validator($request))
  95. ->withInput();
  96. }
  97. $role = Role::findOrFail($id);
  98. $role->update($request->all());
  99. Session::flash('message', 'Success! Role is updated successfully.');
  100. Session::flash('status', 'success');
  101. return redirect('role');
  102. }
  103. /**
  104. * Remove the specified resource from storage.
  105. *
  106. * @param int $id
  107. *
  108. * @return Response
  109. */
  110. public function destroy($id)
  111. {
  112. $role = Role::findOrFail($id);
  113. $role->delete();
  114. Session::flash('message', 'Success! Role is deleted successfully.');
  115. Session::flash('status', 'success');
  116. return redirect('role');
  117. }
  118. public function permissions($id){
  119. $role = Sentinel::findRoleById($id);
  120. $routes = Route::getRoutes();
  121. //Api Route
  122. // $api = app('api.router');
  123. // /** @var $api \Dingo\Api\Routing\Router */
  124. // $routeCollector = $api->getRoutes(config('api.version'));
  125. // /** @var $routeCollector \FastRoute\RouteCollector */
  126. // $api_route = $routeCollector->getRoutes();
  127. $actions = [];
  128. foreach ($routes as $route) {
  129. if ($route->getName() != "" && !substr_count($route->getName(), 'payment')) {
  130. $actions[] = $route->getName();
  131. }
  132. }
  133. //remove store option
  134. $input = preg_quote("store", '~');
  135. $var = preg_grep('~' . $input . '~', $actions);
  136. $actions = array_values(array_diff($actions, $var));
  137. //remove update option
  138. $input = preg_quote("update", '~');
  139. $var = preg_grep('~' . $input . '~', $actions);
  140. $actions = array_values(array_diff($actions, $var));
  141. //Api all names
  142. // foreach ($api_route as $route) {
  143. // if ($route->getName() != "" && !substr_count($route->getName(), 'payment')) {
  144. // $actions[] = $route->getName();
  145. // }
  146. // }
  147. $var = [];
  148. $i = 0;
  149. foreach ($actions as $action) {
  150. $input = preg_quote(explode('.', $action )[0].".", '~');
  151. $var[$i] = preg_grep('~' . $input . '~', $actions);
  152. $actions = array_values(array_diff($actions, $var[$i]));
  153. $i += 1;
  154. }
  155. $actions = array_filter($var);
  156. // dd (array_filter($actions));
  157. return View('backEnd.roles.permissions', compact('role', 'actions'));
  158. }
  159. public function save($id, Request $request){
  160. $role = Sentinel::findRoleById($id);
  161. $role->permissions = [];
  162. if($request->permissions){
  163. foreach ($request->permissions as $permission) {
  164. if(explode('.', $permission)[1] == 'create'){
  165. $role->addPermission($permission);
  166. $role->addPermission(explode('.', $permission)[0].".store");
  167. }
  168. else if(explode('.', $permission)[1] == 'edit'){
  169. $role->addPermission($permission);
  170. $role->addPermission(explode('.', $permission)[0].".update");
  171. }
  172. else{
  173. $role->addPermission($permission);
  174. }
  175. }
  176. }
  177. $role->save();
  178. Session::flash('message', 'Success! Permissions are stored successfully.');
  179. Session::flash('status', 'success');
  180. return redirect('role');
  181. }
  182. }