UseScopeBaseModel.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. namespace App\Model;
  3. use Illuminate\Database\Eloquent\Model;
  4. class UseScopeBaseModel extends Model
  5. {
  6. //人员id字段
  7. const employee_column = '';
  8. public function __construct(array $attributes = [])
  9. {
  10. parent::__construct($attributes);
  11. }
  12. //顶级部门过滤
  13. public function scopeTopClear($query, $user, $search)
  14. {
  15. //是否所有部门
  16. $is_all_depart = $user['is_all_depart'] ?? 0;
  17. //权限范围内的部门
  18. $depart_range = $user['depart_range'] ?? [];
  19. //顶级部门
  20. $search_depart_id = $search['top_depart_id'] ?? 0;
  21. if(empty($search_depart_id)){
  22. //默认进来 自身顶级公司
  23. $top_depart_id = $user['depart_top'][0] ?? [];
  24. $top_depart_id = $top_depart_id['depart_id'] ?? 0;
  25. }else{
  26. //查询 顶级公司
  27. $top_depart_id = $search_depart_id;
  28. }
  29. if($is_all_depart){
  30. //所有部门
  31. if(empty($search_depart_id)){
  32. //全部
  33. $query->whereIn('top_depart_id', $depart_range);
  34. }else{
  35. //查看某个分社
  36. $query->where('top_depart_id', $top_depart_id);
  37. }
  38. }else{
  39. //某个分社全部
  40. $query->where('top_depart_id', $top_depart_id);
  41. }
  42. //获取当前门店下
  43. if(! empty($search['get_my_top_depart_data'])){
  44. $depart = ! empty($user['depart_top'][0]) ? $user['depart_top'][0]: [];
  45. $depart_id = $depart['depart_id'] ?? 0;
  46. $query->where('top_depart_id', $depart_id);
  47. }
  48. return $query;
  49. }
  50. public function scopeClear($query, $user, $search)
  51. {
  52. //权限范围内的部门
  53. $depart_range = $user['depart_range'] ?? [];
  54. $depart_range = array_column($depart_range,'depart_id') ?? [];
  55. //个人 部门 所有
  56. $auth_type = $this->getQx($search,$user);
  57. // 获取模型的实例
  58. $model = $query->getModel();
  59. // 获取模型类名
  60. $className = get_class($model);
  61. // 人员字段
  62. $column = defined($className . '::employee_column') ? constant($className . '::employee_column') : '';
  63. $this->makeModel($query, $auth_type, $user, $depart_range,$column);
  64. }
  65. //最高权限
  66. private function makeModel(&$query, $auth_type, $user, $depart_range, $column){
  67. if(empty($column)) return;
  68. if($auth_type == Employee::AUTH_ONE){
  69. //我创建的
  70. $query->where($column,$user['id']);
  71. }elseif ($auth_type == Employee::AUTH_TWO){
  72. if (empty($depart_range)) {
  73. $query->whereRaw('1 = 0');
  74. } else {
  75. $query->whereExists(function ($q) use ($column, $depart_range) {
  76. $q->from('employee_depart_permission')
  77. ->whereColumn('employee_depart_permission.employee_id', $column)
  78. ->whereIn('employee_depart_permission.depart_id', $depart_range);
  79. });
  80. }
  81. }elseif ($auth_type == Employee::AUTH_THREE){
  82. //所有
  83. }
  84. }
  85. public function getQx($data, $user){
  86. if(empty($data['menu_id'])) return Employee::AUTH_ONE; // 我的
  87. if($user['id'] == Employee::SPECIAL_ADMIN) return Employee::AUTH_THREE; // 全部
  88. if(! empty($user['role_authority'][$data['menu_id']])) {
  89. //指定菜单 显示对应权限
  90. return $user['role_authority'][$data['menu_id']];
  91. }else{
  92. return Employee::AUTH_ONE; // 我的
  93. }
  94. }
  95. function hasMethod($class, $methodName)
  96. {
  97. $reflection = new \ReflectionClass($class);
  98. return $reflection->hasMethod($methodName);
  99. }
  100. }