UseScopeBaseModel.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. public function scopeClear($query, $user, $search)
  13. {
  14. //权限范围内的部门
  15. $depart_range = $user['depart_range'] ?? [];
  16. $depart_range = array_column($depart_range,'depart_id') ?? [];
  17. //个人 部门 所有
  18. $auth_type = $this->getQx($search,$user);
  19. // 获取模型的实例
  20. $model = $query->getModel();
  21. // 获取模型类名
  22. $className = get_class($model);
  23. // 人员字段
  24. $column = defined($className . '::employee_column') ? constant($className . '::employee_column') : '';
  25. $this->makeModel($query, $auth_type, $user, $depart_range,$column);
  26. }
  27. //最高权限
  28. private function makeModel(&$query, $auth_type, $user, $depart_range, $column){
  29. if(empty($column)) return;
  30. if($auth_type == Employee::AUTH_ONE){
  31. //我创建的
  32. $query->where($column,$user['id']);
  33. }elseif ($auth_type == Employee::AUTH_TWO){
  34. if (empty($depart_range)) {
  35. $query->whereRaw('1 = 0');
  36. } else {
  37. $query->whereExists(function ($q) use ($column, $depart_range) {
  38. $q->from('employee_depart_permission')
  39. ->whereColumn('employee_depart_permission.employee_id', $column)
  40. ->whereIn('employee_depart_permission.depart_id', $depart_range);
  41. });
  42. }
  43. }elseif ($auth_type == Employee::AUTH_THREE){
  44. //所有
  45. }
  46. }
  47. public function getQx($data, $user){
  48. if(empty($data['menu_id'])) return Employee::AUTH_ONE; // 我的
  49. if($user['id'] == Employee::SPECIAL_ADMIN) return Employee::AUTH_THREE; // 全部
  50. if(! empty($user['role_authority'][$data['menu_id']])) {
  51. //指定菜单 显示对应权限
  52. return $user['role_authority'][$data['menu_id']];
  53. }else{
  54. return Employee::AUTH_ONE; // 我的
  55. }
  56. }
  57. function hasMethod($class, $methodName)
  58. {
  59. $reflection = new \ReflectionClass($class);
  60. return $reflection->hasMethod($methodName);
  61. }
  62. }