RoleController.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <?php
  2. namespace App\Http\Controllers\Admin\Roles;
  3. use App\Http\Controllers\Controller;
  4. use App\Shop\Permissions\Repositories\Interfaces\PermissionRepositoryInterface;
  5. use App\Shop\Roles\Repositories\RoleRepository;
  6. use App\Shop\Roles\Repositories\RoleRepositoryInterface;
  7. use App\Shop\Roles\Requests\CreateRoleRequest;
  8. use App\Shop\Roles\Requests\UpdateRoleRequest;
  9. class RoleController extends Controller
  10. {
  11. /**
  12. * @var RoleRepositoryInterface
  13. */
  14. private $roleRepo;
  15. /**
  16. * @var PermissionRepositoryInterface
  17. */
  18. private $permissionRepository;
  19. /**
  20. * RoleController constructor.
  21. *
  22. * @param RoleRepositoryInterface $roleRepository
  23. * @param PermissionRepositoryInterface $permissionRepository
  24. */
  25. public function __construct(
  26. RoleRepositoryInterface $roleRepository,
  27. PermissionRepositoryInterface $permissionRepository
  28. ) {
  29. $this->roleRepo = $roleRepository;
  30. $this->permissionRepository = $permissionRepository;
  31. }
  32. /**
  33. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  34. */
  35. public function index()
  36. {
  37. $list = $this->roleRepo->listRoles('name', 'asc')->all();
  38. $roles = $this->roleRepo->paginateArrayResults($list);
  39. return view('admin.roles.list', compact('roles'));
  40. }
  41. /**
  42. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  43. */
  44. public function create()
  45. {
  46. return view('admin.roles.create');
  47. }
  48. /**
  49. * @param CreateRoleRequest $request
  50. *
  51. * @return \Illuminate\Http\RedirectResponse
  52. */
  53. public function store(CreateRoleRequest $request)
  54. {
  55. $this->roleRepo->createRole($request->except('_method', '_token'));
  56. return redirect()->route('admin.roles.index')
  57. ->with('message', 'Create role successful!');
  58. }
  59. /**
  60. * @param $id
  61. *
  62. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  63. */
  64. public function edit($id)
  65. {
  66. $role = $this->roleRepo->findRoleById($id);
  67. $roleRepo = new RoleRepository($role);
  68. $attachedPermissionsArrayIds = $roleRepo->listPermissions()->pluck('id')->all();
  69. $permissions = $this->permissionRepository->listPermissions(['*'], 'name', 'asc');
  70. return view('admin.roles.edit', compact(
  71. 'role',
  72. 'permissions',
  73. 'attachedPermissionsArrayIds'
  74. ));
  75. }
  76. /**
  77. * @param UpdateRoleRequest $request
  78. * @param $id
  79. *
  80. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  81. */
  82. public function update(UpdateRoleRequest $request, $id)
  83. {
  84. $role = $this->roleRepo->findRoleById($id);
  85. if ($request->has('permissions')) {
  86. $roleRepo = new RoleRepository($role);
  87. $roleRepo->syncPermissions($request->input('permissions'));
  88. }
  89. $this->roleRepo->updateRole($request->except('_method', '_token'), $id);
  90. return redirect()->route('admin.roles.edit', $id)
  91. ->with('message', 'Update role successful!');
  92. }
  93. }