AdminPermissionTrait.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. namespace App\Models\Traits;
  3. use Illuminate\Support\Facades\Config;
  4. trait AdminPermissionTrait
  5. {
  6. /**
  7. * 与角色的多对多关系.
  8. *
  9. * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
  10. */
  11. public function roles()
  12. {
  13. return $this->belongsToMany(Config::get('admin.role'), Config::get('admin.permission_role_table'),
  14. Config::get('admin.permission_foreign_key'), Config::get('admin.role_foreign_key'));
  15. }
  16. /**
  17. * 与菜单的多对多关系.
  18. *
  19. * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
  20. */
  21. public function menus()
  22. {
  23. return $this->belongsToMany(Config::get('admin.menu'), Config::get('admin.permission_menu_table'),
  24. Config::get('admin.permission_foreign_key'), Config::get('admin.menu_foreign_key'));
  25. }
  26. /**
  27. * 保存角色
  28. * @param $roles
  29. * @return mixed
  30. */
  31. public function saveRoles($roles)
  32. {
  33. if (!empty($roles)) {
  34. $this->roles()->sync($roles);
  35. } else {
  36. $this->roles()->detach();
  37. }
  38. }
  39. /**
  40. * 保存菜单
  41. * @param $menus
  42. * @return mixed
  43. */
  44. public function saveMenus($menus)
  45. {
  46. if (!empty($menus)) {
  47. $this->menus()->sync($menus);
  48. } else {
  49. $this->menus()->detach();
  50. }
  51. }
  52. public static function boot()
  53. {
  54. parent::boot();
  55. static::deleting(function($permission) {
  56. if (!method_exists(Config::get('admin.permission'), 'bootSoftDeletes')) {
  57. $permission->roles()->sync([]);
  58. $permission->menus()->sync([]);
  59. }
  60. return true;
  61. });
  62. }
  63. /**
  64. * Controller对应的权限
  65. * @return array
  66. */
  67. public static function controllerPermissions()
  68. {
  69. $permissions = static::with('menus')->get()->toArray();
  70. $methods = [];
  71. foreach ($permissions as $permission) {
  72. $controllers = $permission[Config::get('admin.permission_controller')];
  73. if (!empty($controllers)) {
  74. $_controllerArr = explode(';', $controllers);
  75. foreach ($_controllerArr as $str) {
  76. $c = explode('@', $str);
  77. $controller = strtolower($c[0]);
  78. $size = count($c);
  79. if ($size > 1) {
  80. for($i = 1; $i < $size; $i++) {
  81. $method = strtolower($c[$i]);
  82. if (empty($method)) {
  83. $methods[$controller] = $permission;
  84. } else {
  85. $methods[$controller.'@'.$method] = $permission;
  86. }
  87. }
  88. } else {
  89. $methods[$controller] = $permission;
  90. }
  91. }
  92. }
  93. }
  94. return $methods;
  95. }
  96. }