ResourceRolePermissionHelpers.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. namespace App\Traits;
  3. use App\Http\Resources\AdminPermissionResource;
  4. use App\Http\Resources\AdminRoleResource;
  5. use App\Http\Resources\AreaResource;
  6. use App\Models\AdminUser;
  7. use App\Models\Area;
  8. use Illuminate\Support\Str;
  9. trait ResourceRolePermissionHelpers
  10. {
  11. /**
  12. * 关联的角色和权限, 是否只是 id 数组
  13. *
  14. * @var bool
  15. */
  16. protected $onlyRolePermissionIds = false;
  17. /**
  18. * 关联的角色和权限,只包含 slug
  19. *
  20. * @var bool
  21. */
  22. protected $onlyRolePermissionSlugs = false;
  23. /**
  24. * 获取所有权限,包括角色中的
  25. *
  26. * @var bool
  27. */
  28. protected $gatherAllPermissions = false;
  29. protected $onlyAreasIds = false;
  30. public function onlyRolePermissionIds($yes = true)
  31. {
  32. $this->onlyRolePermissionIds = $yes;
  33. $this->onlyAreasIds = $yes;
  34. return $this;
  35. }
  36. public function onlyRolePermissionSlugs($yes = true)
  37. {
  38. $this->onlyRolePermissionSlugs = $yes;
  39. return $this;
  40. }
  41. public function gatherAllPermissions($yes = true)
  42. {
  43. $this->gatherAllPermissions = $yes;
  44. return $this;
  45. }
  46. protected function getRoles()
  47. {
  48. /** @var AdminUser $model */
  49. $model = $this->resource;
  50. if ($this->onlyRolePermissionIds) {
  51. return $model->roles()->pluck('id');
  52. } elseif ($this->onlyRolePermissionSlugs) {
  53. return $model->roles()->pluck('slug');
  54. } else {
  55. return AdminRoleResource::collection($this->whenLoaded('roles'));
  56. }
  57. }
  58. protected function getAreas()
  59. {
  60. /** @var AdminUser $model */
  61. $model = $this->resource;
  62. if($this->onlyAreasIds) {
  63. return $model->areas()->pluck('areas.id');
  64. }
  65. return AreaResource::collection($this->whenLoaded('areas'));
  66. }
  67. protected function getPermissions()
  68. {
  69. /** @var AdminUser $model */
  70. $model = $this->resource;
  71. if ($this->gatherAllPermissions) {
  72. $perms = $model->allPermissions();
  73. } else {
  74. $perms = $model->permissions();
  75. }
  76. if ($this->onlyRolePermissionIds) {
  77. return $perms->pluck('id');
  78. } elseif ($this->onlyRolePermissionSlugs) {
  79. return $perms->pluck('slug');
  80. } elseif ($this->gatherAllPermissions) {
  81. return AdminPermissionResource::collection($perms);
  82. } else {
  83. return AdminPermissionResource::collection($this->whenLoaded('permissions'));
  84. }
  85. }
  86. }