AdminRoleController.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Filters\AdminRoleFilter;
  4. use App\Http\Requests\AdminRoleRequest;
  5. use App\Http\Resources\AdminRoleResource;
  6. use App\Models\AdminMerchant;
  7. use App\Models\AdminRole;
  8. use App\Utils\Admin;
  9. use Illuminate\Http\Request;
  10. use App\Http\Controllers\Controller;
  11. use Illuminate\Support\Facades\Log;
  12. class AdminRoleController extends Controller
  13. {
  14. public function store(AdminRoleRequest $request, AdminRole $model)
  15. {
  16. $id = Admin::user()->id;
  17. $inputs = $request->validated();
  18. $inputs['admin_id'] = $id;
  19. if (Admin::user()->isRole(AdminRole::MERCHANTSADMIN)) {
  20. $inputs['merchant_id'] = AdminMerchant::getMchId();
  21. } else {
  22. $inputs['merchant_id'] = Admin::user()->merchant_id;
  23. }
  24. $inputs['slug'] = $inputs['slug'] . '_sh_' . $inputs['merchant_id']; // 拼接上商户id
  25. $orWhere = ['slug' => $inputs['slug']];
  26. $data = AdminRole::query()
  27. ->where('name', $inputs['name'])
  28. ->where(function ($query) use ($orWhere) {
  29. $query->orWhere($orWhere);
  30. })->first();
  31. if ($data) return $this->error('标识不能重复');
  32. if (!Admin::user()->isRole(AdminRole::ADMINISTROTOR) and in_array($inputs['slug'], [AdminRole::ADMINISTROTOR, AdminRole::MERCHANTSADMIN])) {
  33. // 控制不能添加 技术管理员标识,商户端标识
  34. return $this->error('添加路由权限不足,请联系服务商');
  35. }
  36. $role = $model->create($inputs);
  37. if (!empty($perms = $inputs['permissions'] ?? [])) {
  38. $role->permissions()->attach($perms);
  39. }
  40. // 添加菜单权限
  41. if (!empty($vue_routers = $inputs['menu'] ?? [])) {
  42. $vue_routers = setlist(object_array($vue_routers));
  43. $role->vue_routers()->attach(array_column($vue_routers, 'id'));
  44. }
  45. return $this->created(AdminRoleResource::make($role));
  46. }
  47. public function edit(AdminRole $adminRole)
  48. {
  49. $adminRole->load(['permissions', 'vue_routers']);
  50. return $this->ok(AdminRoleResource::make($adminRole));
  51. }
  52. public function update(AdminRoleRequest $request, AdminRole $adminRole)
  53. {
  54. $inputs = $request->validated();
  55. //Log::info(json_encode($inputs));
  56. $adminRole->update($inputs);
  57. if (isset($inputs['permissions'])) {
  58. $adminRole->permissions()->sync($inputs['permissions']);
  59. }
  60. //更新菜单权限
  61. if (!empty($inputs['menu'])) {
  62. $vue_routeres = setlist(object_array($inputs['menu']));
  63. // Log::info($vue_routeres);
  64. // $vue_routeres = $inputs['vue_routers'];
  65. $adminRole->vue_routers()->sync(array_column($vue_routeres, 'id'));
  66. }
  67. return $this->created(AdminRoleResource::make($adminRole));
  68. }
  69. public function destroy(AdminRole $adminRole)
  70. {
  71. $adminRole->delete();
  72. return $this->noContent();
  73. }
  74. // 权限列表 if (Admin::user()->isRole('administrator')) {
  75. public function index(Request $request, AdminRoleFilter $filter)
  76. {
  77. $id = Admin::user()->id;
  78. $userQuery = $roles = AdminRole::query()->with(['permissions'])->filter($filter);
  79. // if (Admin::isAdministrator()) {
  80. if (Admin::user()->isRole(AdminRole::ADMINISTROTOR)) {
  81. // 技术管理员 不限制权限
  82. $userQuery->where('admin_id', $id);
  83. } else if (Admin::user()->isRole(AdminRole::MERCHANTSADMIN)) {
  84. //查看当前
  85. $userQuery->where('merchant_id', AdminMerchant::getMchId());
  86. $userQuery->whereNotIn('slug', [AdminRole::ADMINISTROTOR, AdminRole::MERCHANTSADMIN]);
  87. }
  88. // else if (Admin::user()->isRole(AdminRole::NORMALADMINISTRATOR)) {
  89. // //超级管理员
  90. // $userQuery->where('merchant_id', Admin::user()->merchant_id);
  91. // $userQuery->whereNotIn('slug', [AdminRole::ADMINISTROTOR, AdminRole::MERCHANTSADMIN, AdminRole::NORMALADMINISTRATOR]);
  92. // }
  93. else {
  94. $userQuery->where('admin_id', $id);
  95. }
  96. $userQuery->orderBy('order');
  97. $roles = $request->get('all') ? $userQuery->get() : $userQuery->paginate();
  98. return $this->ok(AdminRoleResource::collection($roles));
  99. }
  100. }