diff --git a/catch/permissions/model/DataRangScopeTrait.php b/catch/permissions/model/DataRangScopeTrait.php new file mode 100644 index 0000000..4084e7c --- /dev/null +++ b/catch/permissions/model/DataRangScopeTrait.php @@ -0,0 +1,63 @@ + + * @date 2020/6/6 + */ + protected function scopeDataRange($roles) + { + return $this->whereIn($this->aliasField('creator_id'), $this->getDepartmentUserIdsBy($roles)); + } + + /** + * 获取部门IDs + * + * @param $roles + * @return array + * @author JaguarJack + * @date 2020/6/6 + */ + public function getDepartmentUserIdsBy($roles) + { + $userIds = []; + + $isAll = false; + + $user = request()->user(); + + foreach ($roles as $role) { + switch ($role->data_range) { + case Roles::ALL_DATA: + $isAll = true; + break; + case Roles::SELF_CHOOSE: + $departmentIds = array_merge(array_column($role->getDepartments()->toArray(), 'id')); + $userIds = array_merge($userIds, Users::getUserIdsByDepartmentIds($departmentIds)); + break; + case Roles::SELF_DATA: + $userIds[] = $user->id; + break; + case Roles::DEPARTMENT_DOWN_DATA: + case Roles::DEPARTMENT_DATA: + $userIds = array_merge($userIds, Users::getUserIdsByDepartmentIds([$user->department_id])); + break; + default: + break; + } + + // 如果有全部数据 直接跳出 + if ($isAll) { + break; + } + } + + return $userIds; + } +} \ No newline at end of file diff --git a/catch/permissions/model/Roles.php b/catch/permissions/model/Roles.php index e8b321b..8c59b10 100644 --- a/catch/permissions/model/Roles.php +++ b/catch/permissions/model/Roles.php @@ -18,13 +18,12 @@ class Roles extends CatchModel public const DEPARTMENT_DATA = 4; // 部门数据 public const DEPARTMENT_DOWN_DATA = 5; // 部门及以下数据 - protected $field = [ 'id', // 'role_name', // 角色名 'parent_id', // 父级ID - 'creator_id', // 创建者 - 'data_range', // 数据范围 + 'creator_id', // 创建者 + 'data_range', // 数据范围 'description', // 角色备注 'created_at', // 创建时间 'updated_at', // 更新时间 @@ -50,41 +49,4 @@ class Roles extends CatchModel return $this->belongsToMany(Users::class, 'user_has_roles', 'uid', 'role_id'); } - - public static function getDepartmentUserIdsBy($roles) - { - $uids = []; - - $isAll = false; - - $user = request()->user(); - - foreach ($roles as $role) { - switch ($role->data_range) { - case self::ALL_DATA: - $isAll = true; - break; - case self::SELF_CHOOSE: - $departmentIds = array_merge(array_column($role->getDepartments()->toArray(), 'id')); - $uids = array_merge($uids, Users::getUserIdsByDepartmentIds($departmentIds)); - break; - case self::SELF_DATA: - $uids[] = $user->id; - break; - case self::DEPARTMENT_DOWN_DATA: - case self::DEPARTMENT_DATA: - $uids = array_merge($uids, Users::getUserIdsByDepartmentIds([$user->department_id])); - break; - default: - break; - } - - // 如果有全部数据 直接跳出 - if ($isAll) { - break; - } - } - - return $uids; - } } diff --git a/catch/permissions/model/Users.php b/catch/permissions/model/Users.php index 70a4bf6..26c5074 100644 --- a/catch/permissions/model/Users.php +++ b/catch/permissions/model/Users.php @@ -18,8 +18,8 @@ class Users extends CatchModel 'username', // 用户名 'password', // 用户密码 'email', // 邮箱 登录 - 'creator_id', // 创建者ID - 'department_id', // 部门ID + 'creator_id', // 创建者ID + 'department_id', // 部门ID 'status', // 用户状态 1 正常 2 禁用 'last_login_ip', // 最后登录IP 'last_login_time', // 最后登录时间 diff --git a/catch/wechat/Menus.php b/catch/wechat/Menus.php new file mode 100644 index 0000000..6fd199e --- /dev/null +++ b/catch/wechat/Menus.php @@ -0,0 +1 @@ +