RoleService.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. <?php
  2. namespace App\Services\Base;
  3. use App\Repositories\Criteria\Base\RoleCriteria;
  4. use App\Repositories\Eloquent\Base\RoleRepositoryEloquent;
  5. use App\Repositories\Models\Base\Department;
  6. use App\Repositories\Models\Base\Role;
  7. use App\Repositories\Presenters\Base\RolePresenter;
  8. use Illuminate\Http\Request;
  9. class RoleService
  10. {
  11. /**
  12. * @var RoleRepositoryEloquent
  13. */
  14. private $roleRepository;
  15. /**
  16. * RoleService constructor.
  17. *
  18. * @param RoleRepositoryEloquent $roleRepositoryEloquent
  19. */
  20. public function __construct(RoleRepositoryEloquent $roleRepositoryEloquent)
  21. {
  22. $this->roleRepository = $roleRepositoryEloquent;
  23. }
  24. /**
  25. * @param Request $request
  26. *
  27. * @return mixed
  28. * @throws \Prettus\Repository\Exceptions\RepositoryException
  29. */
  30. public function handleList(Request $request)
  31. {
  32. $this->roleRepository->pushCriteria(new RoleCriteria($request));
  33. $this->roleRepository->setPresenter(RolePresenter::class);
  34. return $this->roleRepository->searchRolesByPage();
  35. }
  36. /**
  37. * @param $id
  38. *
  39. * @return \Illuminate\Database\Eloquent\Model
  40. */
  41. public function handleProfile($id)
  42. {
  43. $this->roleRepository->setPresenter(RolePresenter::class);
  44. return $this->roleRepository->searchRoleBy($id);
  45. }
  46. /**
  47. * @param array $data
  48. *
  49. * @return mixed
  50. * @throws \Prettus\Validator\Exceptions\ValidatorException
  51. */
  52. public function handleStore($data)
  53. {
  54. // $data['company_id'] = 0;
  55. // $admin = login_admin();
  56. // if ($admin && $admin['company_id']) $data['company_id'] = $admin['company_id'];
  57. $role = $this->roleRepository->create($data);
  58. return $role;
  59. }
  60. /**
  61. * @param array $data
  62. *
  63. * @return mixed
  64. * @throws \Prettus\Validator\Exceptions\ValidatorException
  65. */
  66. public function handleUpdate($data)
  67. {
  68. $role = $this->roleRepository->update($data, $data['id']);
  69. return $role;
  70. }
  71. /**
  72. * @param Request $request
  73. *
  74. * @return mixed
  75. * @throws \Prettus\Validator\Exceptions\ValidatorException
  76. */
  77. public function handleDelete($id)
  78. {
  79. return $this->roleRepository->delete($id);
  80. }
  81. /**
  82. * 保存菜单权限
  83. * @param Request $request
  84. * @return bool|void
  85. */
  86. public function handleSaveMenus(Request $request)
  87. {
  88. $data = $request->all();
  89. $role = $this->roleRepository->find($request->get('id'));
  90. $role->menus()->sync($data['menus']);
  91. return true;
  92. }
  93. /**
  94. * 保存Apis
  95. * @param Request $request
  96. * @return bool
  97. */
  98. public function handleSaveApis(Request $request)
  99. {
  100. $data = $request->all();
  101. $role = $this->roleRepository->find($request->get('id'));
  102. $role->givePermissionTo($data['apis']);
  103. return true;
  104. }
  105. /**
  106. * 保存数据权限
  107. * @param Request $request
  108. * @return bool
  109. * @throws \Prettus\Validator\Exceptions\ValidatorException
  110. */
  111. public function handleSaveDataPermissions(Request $request)
  112. {
  113. $data = $request->all();
  114. $role = $this->roleRepository->update([
  115. 'data_permission_type' => $data['data_permission_type']
  116. ], $request->get('id'));
  117. if (array_key_exists('departments', $data) && is_array($data['departments'])) $role->departments()->sync($data['departments']);
  118. // if (array_key_exists('shops', $data) && is_array($data['shops'])) $role->shops()->sync($data['shops']);
  119. // if (array_key_exists('factory', $data) && is_array($data['factory'])) $role->factory()->sync($data['factory']);
  120. return true;
  121. }
  122. /**
  123. * 获取角色菜单id
  124. * @param Request $request
  125. * @return array
  126. */
  127. public function handleMenusLists(Request $request)
  128. {
  129. $role = $this->roleRepository->find($request->get('id'));
  130. if ($role) return $role->menus()->pluck('id');
  131. return [];
  132. }
  133. /**
  134. * 获取角色数据id
  135. * @param Request $request
  136. * @return array
  137. */
  138. public function handleDataLists(Request $request)
  139. {
  140. $role = $this->roleRepository->find($request->get('id'));
  141. if ($role) {
  142. switch ($role->data_permission_type) {
  143. // case Role::DATA_TYPE_DEPARTMENT:
  144. case Role::DATA_TYPE_CUSTOM:
  145. return [
  146. 'type' => $role->data_permission_type,
  147. 'departments' => $role->departments()->pluck('id'),
  148. // 'shops' => $role->shops()->pluck('id'),
  149. // 'factory' => $role->factory()->pluck('id')
  150. ];
  151. break;
  152. case Role::DATA_TYPE_ALL:
  153. case Role::DATA_TYPE_SELF:
  154. return [
  155. 'type' => $role->data_permission_type,
  156. 'data' => []
  157. ];
  158. break;
  159. }
  160. }
  161. return [];
  162. }
  163. /**
  164. * 获取角色APIid
  165. * @param Request $request
  166. * @return array
  167. */
  168. public function handleApisLists(Request $request)
  169. {
  170. $role = $this->roleRepository->find($request->get('id'));
  171. if ($role) return $role->permissions()->pluck('id');
  172. return [];
  173. }
  174. /**
  175. * 选项数据
  176. * @param Request $request
  177. * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|\Illuminate\Support\Collection|mixed
  178. * @throws \Prettus\Repository\Exceptions\RepositoryException
  179. */
  180. public function handleSelectOptions(Request $request)
  181. {
  182. $this->roleRepository->pushCriteria(new RoleCriteria($request));
  183. return $this->roleRepository->all(['id', 'name', 'nickname', 'guard_name', 'sort']);
  184. }
  185. }