| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- <?php
- /**
- * Created by PhpStorm.
- * Name: 芸众商城系统
- * Author: 广州市芸众信息科技有限公司
- * Profile: 广州市芸众信息科技有限公司位于国际商贸中心的广州,专注于移动电子商务生态系统打造,拥有芸众社交电商系统、区块链数字资产管理系统、供应链管理系统、电子合同等产品/服务。官网 :www.yunzmall.com www.yunzshop.com
- * Date: 2021/9/22
- * Time: 13:37
- */
- namespace business\common\services;
- use business\common\models\Department;
- use business\common\models\Premission;
- use business\common\models\Staff;
- class DepartmentPremissionService
- {
- public $right_arr;
- public $key;
- public $business_id;
- public $uid;
- public $return_data;
- public $right_type;
- public $member_department_id;
- public $all_department_id;
- public $business_department_list;
- public $identity;
- public function __construct($business_id = 0, $uid = 0)
- {
- $this->business_id = $business_id ?: SettingService::getBusinessId();
- $this->uid = $uid ?: \YunShop::app()->getMemberId();
- $this->right_arr = $this->getRightArr($business_id, $uid);
- $this->return_data = [];
- $this->all_department_id = Department::business($this->business_id)->pluck('id')->toArray();
- $this->key = [
- 'createDepartment', 'updateDepartment', 'deleteDepartment',
- 'getStaffList', 'createStaff', 'updateStaff', 'deleteStaff'
- ];
- }
- /*
- * 筛选指定接口的权限部门id
- */
- public function getAllPremissionDepartmentId($all_right = 0)
- {
- foreach ($this->key as $v) {
- if ($all_right) {
- $this->return_data[$v] = $this->all_department_id;
- } else {
- $this->return_data[$v] = $this->$v();
- }
- }
- return $this->return_data;
- }
- /*
- * 获取部门员工列表
- */
- public function getBusinessDepartmentList()
- {
- if (!$this->business_department_list) {
- $this->business_department_list = Department::where('business_id', $this->business_id)->get();
- }
- return $this->business_department_list;
- }
- private function updateStaff()
- {
- if ($this->right_type == 1) { //如果是独立权限
- $department_id_arr = $this->right_arr->where('route', 'updateStaff')->isEmpty() ? [] : $this->member_department_id;
- } else {
- $department_id_arr = $this->getCommonManageDepartment('updateStaff');
- }
- return $department_id_arr ? $department_id_arr : [];
- }
- private function deleteStaff()
- {
- if ($this->right_type == 1) { //如果是独立权限
- $department_id_arr = $this->right_arr->where('route', 'deleteStaff')->isEmpty() ? [] : $this->member_department_id;
- } else {
- $department_id_arr = $this->getCommonManageDepartment('deleteStaff');
- }
- return $department_id_arr ? $department_id_arr : [];
- }
- private function createStaff()
- {
- if ($this->right_type == 1) { //如果是独立权限
- $department_id_arr = $this->right_arr->where('route', 'createStaff')->isEmpty() ? [] : $this->member_department_id;
- } else {
- $department_id_arr = $this->getCommonManageDepartment('createStaff');
- }
- return $department_id_arr ? $department_id_arr : [];
- }
- private function getStaffList()
- {
- if ($this->right_type == 1) { //如果是独立权限
- $department_id_arr = $this->right_arr->where('route', 'getStaffList')->isEmpty() ? [] : $this->member_department_id;
- } else {
- $department_id_arr = $this->getCommonManageDepartment('getStaffList');
- }
- return $department_id_arr ? array_merge($department_id_arr, Department::getAllDepartmentSubId($department_id_arr, $this->getBusinessDepartmentList(), $this->business_id)) : [];
- }
- private function deleteDepartment()
- {
- if ($this->right_arr->where('route', 'deleteAllDepartment')->isNotEmpty()) {
- return $this->all_department_id;
- }
- if ($this->right_type == 1) { //如果是独立权限
- $department_id_arr = $this->right_arr->where('route', 'deleteSubDepartment')->isEmpty() ? [] : $this->member_department_id;
- } else {
- $department_id_arr = $this->getCommonManageDepartment('deleteSubDepartment');
- }
- return $department_id_arr ? array_merge($department_id_arr, Department::getAllDepartmentSubId($department_id_arr, $this->getBusinessDepartmentList(), $this->business_id)) : [];
- }
- private function updateDepartment()
- {
- if ($this->right_arr->where('route', 'updateAllDepartment')->isNotEmpty()) {
- return $this->all_department_id;
- }
- if ($this->right_type == 1) { //如果是独立权限
- $department_id_arr = $this->right_arr->where('route', 'updateSubDepartment')->isEmpty() ? [] : $this->member_department_id;
- } else {
- $department_id_arr = $this->getCommonManageDepartment('updateSubDepartment');
- }
- return $department_id_arr ? array_merge($department_id_arr, Department::getAllDepartmentSubId($department_id_arr, $this->getBusinessDepartmentList(), $this->business_id)) : [];
- }
- private function createDepartment()
- {
- if ($this->right_arr->where('route', 'createAllDepartment')->isNotEmpty()) {
- return $this->all_department_id;
- }
- if ($this->right_type == 1) { //如果是独立权限
- $department_id_arr = $this->right_arr->where('route', 'createSubDepartment')->isEmpty() ? [] : $this->member_department_id;
- } else {
- $department_id_arr = $this->getCommonManageDepartment('createSubDepartment');
- }
- return $department_id_arr ? array_merge($department_id_arr, Department::getAllDepartmentSubId($department_id_arr, $this->getBusinessDepartmentList(), $this->business_id)) : [];
- }
- private function getCommonManageDepartment($key)
- {
- $res = $this->right_arr->where('route', $key)->pluck('department_id')->toArray();
- return $res ? array_values(array_filter(array_unique($res))) : [];
- }
- /*
- * 获取当前用户已经被勾选允许的权限路由和页面
- */
- public function getRightArr($business_id = 0, $uid = 0)
- {
- if ($this->right_arr) {
- return $this->right_arr;
- }
- $business_id = $business_id ?: SettingService::getBusinessId();
- $uid = $uid ?: \YunShop::app()->getMemberId();
- $staff = Staff::business($business_id)->with(['hasManyDepartmentStaff' => function ($query) {
- $query->with('hasOneDepartment');
- }])->where('uid', $uid)->first();
- if (!$staff) {
- return collect((Object)[]);
- }
- $member_department_id = []; //全部关联部门ID
- $common_department_id = []; //是成员的部门ID
- $leader_department_id = [];//全部关联部门ID
- if ($staff->hasManyDepartmentStaff->isNotEmpty()) {
- $staff->hasManyDepartmentStaff->each(function ($v) use (&$common_department_id, &$leader_department_id) {
- if (!$v->hasOneDepartment->id) return;
- $v->is_leader ? $leader_department_id[] = $v->department_id : $common_department_id[] = $v->department_id;
- });
- $member_department_id = array_merge($common_department_id, $leader_department_id);
- }
- $this->member_department_id = $member_department_id;
- $this->right_type = $staff->right_type;
- if ($staff->right_type == 1) { //如果使用成员独立权限
- $right_arr = Premission::business($business_id)->where('staff_id', $staff->id)->where('type', 3)->get();
- } else { //如果使用部门权限
- if ($staff->hasManyDepartmentStaff->isNotEmpty()) {
- if (!$member_department_id) {
- return collect((Object)[]);
- }
- $where = [
- ['uniacid', \YunShop::app()->uniacid],
- ['business_id', $business_id],
- ];
- $where[] = [function ($query) use ($common_department_id, $leader_department_id) {
- if ($common_department_id) {
- $common_where = function ($query1) use ($common_department_id) {
- $query1->whereIn('department_id', $common_department_id)->where('type', 1); //获取相关部门成员权限
- };
- }
- if ($leader_department_id) {
- $leader_where = function ($query2) use ($leader_department_id) {
- $query2->whereIn('department_id', $leader_department_id)->where('type', 2); //获取相关部门领导权限
- };
- }
- if ($common_department_id && $leader_department_id) {
- $query->where($common_where)->orWhere($leader_where);
- } elseif ($common_department_id) {
- $query->where($common_where);
- } elseif ($leader_department_id) {
- $query->where($leader_where);
- }
- }];
- $right_arr = Premission::where($where)->get(); //获取成员成员&领导权限
- }
- }
- if (!$right_arr){
- $right_arr = collect((Object)[]);
- }
- $this->right_arr = $right_arr;
- return $this->right_arr;
- }
- public static function returnArr($result, $msg = '', $data = [])
- {
- return ['result' => $result, 'msg' => $msg, 'data' => $data];
- }
- }
|