1189 行
51 KiB
PHP
可执行文件
1189 行
51 KiB
PHP
可执行文件
<?php
|
||
|
||
namespace Common\Business;
|
||
|
||
use Common\Model\JurisdictionRecordModel;
|
||
use Common\Model\JurisdictionGroupModel;
|
||
use Common\Model\JurisdictionListModel;
|
||
use Common\Model\JurisdictionUserModel;
|
||
use Common\Model\RetailManagerModel;
|
||
use Common\Model\RetailStoreModel;
|
||
use Common\Validate\CustomValidate;
|
||
|
||
//[1.9.13]
|
||
|
||
/**
|
||
* 角色类
|
||
* Class Role
|
||
* [
|
||
* 公有方法
|
||
* storeUseLimit 商户后台->门店管理->门店的使用限制
|
||
* storeUseLimitNeedGather 门店的使用限制 需要验证的权限id集合
|
||
* getRole 获取权限
|
||
* setRole 保存权限
|
||
* getRoleRecord 获取权限修改记录
|
||
* getOperatorList 获取操作者列表-供选择
|
||
* createSystemGroup 新增代理商、商户、门店、导购员、收银员时生成系统权限
|
||
* getRoleList 获取用户自定义的角色列表
|
||
* changeRoleStatus 修改自定义角色的状态
|
||
* delCustomerRole 删除自定义角色
|
||
* resetUserRole 重置系统角色用户权限为初始状态
|
||
* 私有方法
|
||
* generateTree 数组转换为树型数据
|
||
* getActualCheckIds 处理实际需要保存的ID列表
|
||
* getOperateContent 获取操作用户权限的名称集合
|
||
* delChildJur 删除子集权限
|
||
* delArrKey 去除被删除的ID列表
|
||
* verifyParam 验证请求参数
|
||
* ]
|
||
* @package Common\Business
|
||
*/
|
||
class Role
|
||
{
|
||
public $errMsg;
|
||
|
||
/**
|
||
* 获取权限节点进行编辑
|
||
* @param $param
|
||
* $param['operate_type'] 操作类型 1自己权限详细的节点(给自己后台的自定义用户组权限) 2菜单栏(给下级用户组的权限)
|
||
* $param['group_id'] 自己权限的分组的列表的ID
|
||
* $param['operator_id'] 操作的用户在权限用户表的ID
|
||
* $param['next_user_type'] 子集所属后台角色功能类型/下级用户类型 1合伙人 2代理商 3商户 4门店 5导购员 6收银员
|
||
* $param['next_id'] 下级用户对应的表的ID(operate_type==1:权限组表的ID;operate_type==2:代理商/商户/门店/导购员/收银员表ID)
|
||
* @return mixed
|
||
*/
|
||
public function getRole($param)
|
||
{
|
||
if (!$this->verifyParam($param)) {
|
||
return callBack(statusCode()['error'], $this->errMsg);
|
||
}
|
||
$JurUserModel = new JurisdictionUserModel();
|
||
$JurListModel = new JurisdictionListModel();
|
||
$JurGroupModel = new JurisdictionGroupModel();
|
||
$fields = [
|
||
'id',
|
||
'name as label',
|
||
'pid',
|
||
'tips',
|
||
];
|
||
switch ($param['operate_type']) {
|
||
case 1:
|
||
//获取自己的角色权限节点 所有
|
||
//1.获取用户自己拥有的权限列表
|
||
// 1.1获取权限列表ID
|
||
$jur_id = $JurGroupModel->getFindField(['id' => $param['group_id']], 'jurisdiction_id');
|
||
|
||
if (!$jur_id) {
|
||
return callBack(statusCode()['error'], '操作有误');
|
||
}
|
||
// 1.2获取权限列表
|
||
$idMap = ['id' => ['in', $jur_id]];
|
||
if ($param['next_user_type'] == 3) {
|
||
//是商户编辑自定义角色权限 则删除门店权限节点
|
||
$idMap = [
|
||
$idMap,
|
||
['id' => ['not in', [705, 709]]]
|
||
];
|
||
}
|
||
$listMap = [
|
||
$idMap,
|
||
'user_type' => $param['next_user_type'],
|
||
];
|
||
|
||
if (!empty($param['next_id'])) {
|
||
//2.获取已选节点列表
|
||
$roleInfo = $JurGroupModel->getFind(['id' => $param['next_id']], 'id,status,role_name,jurisdiction_id');
|
||
if (!$roleInfo) {
|
||
return callBack(statusCode()['error'], '操作有误1');
|
||
}
|
||
// 2.3获取已有权限id列表
|
||
$checkMap = ['id' => ['in', $roleInfo['jurisdiction_id']], 'user_type' => $param['next_user_type']];
|
||
unset($roleInfo['jurisdiction_id']);
|
||
}
|
||
break;
|
||
case 2:
|
||
//获取下级用户类型的所有可选的菜单节点
|
||
$jur_id = $JurGroupModel->getFindField(['id' => $param['next_user_type']], 'jurisdiction_id');
|
||
$listMap = [
|
||
'user_type' => $param['next_user_type'],
|
||
'is_menu' => 1,
|
||
];
|
||
|
||
//获取下级已选节点列表
|
||
switch ($param['next_user_type']) {
|
||
case 2:
|
||
case 5:
|
||
case 6:
|
||
//代理商 导购员 收银员
|
||
$next_group_id = $JurUserModel->getFindField([
|
||
'user_type' => $param['next_user_type'],
|
||
'system_user_id' => $param['next_id']
|
||
], 'jurisdiction_group_id');
|
||
break;
|
||
case 3:
|
||
case 4:
|
||
//商户 门店
|
||
$Merchant = new Merchant();
|
||
if ($param['next_user_type'] == 3) {
|
||
$next_group_id = $JurUserModel->getFindField([
|
||
'user_type' => $param['next_user_type'],
|
||
'system_user_id' => $param['next_id']
|
||
], 'jurisdiction_group_id');
|
||
$platform_type = $Merchant->getMerPlatFormType($param['next_id']);
|
||
$id = $platform_type == 2 ? [206, 936] : [];
|
||
} else {
|
||
$StoreModel = new RetailStoreModel();
|
||
$store = $StoreModel->getFind(['id' => $param['next_id']], 'merchantid,jur_group_id,store_class');
|
||
|
||
$next_group_id = $store['jur_group_id'];
|
||
$platform_type = $Merchant->getMerPlatFormType($store['merchantid']);
|
||
$id = $platform_type == 2 ? [808, 946] : [];
|
||
if ($store['store_class'] == 1) {
|
||
//非加盟店,去除收入管理权限
|
||
$id[] = 1048;
|
||
}
|
||
}
|
||
|
||
if ($platform_type == 2 || $param['next_user_type'] == 4 && $store['store_class'] == 1) {
|
||
//Q3ERP 去除进销存及资金管理 非加盟店,去除收入管理权限
|
||
$authList = $JurListModel->getSelect(['id' => ['in', $id]], 'id,pid,type');
|
||
$del_q3_jur = [];
|
||
$this->getActualCheckIds($authList, $del_q3_jur, 2, ['is_menu' => 1]);
|
||
$jur_id = $this->delArrKey($jur_id, $del_q3_jur);
|
||
}
|
||
break;
|
||
default:
|
||
$next_group_id = 0;
|
||
}
|
||
$listMap['id'] = ['in', $jur_id];
|
||
|
||
if (!$next_group_id) {
|
||
return callBack(statusCode()['error'], '操作有误');
|
||
}
|
||
$next_jur_id = $JurGroupModel->getFindField(['id' => $next_group_id], 'jurisdiction_id');
|
||
if (!$next_jur_id) {
|
||
return callBack(statusCode()['error'], '操作有误2');
|
||
}
|
||
$checkMap = [
|
||
'id' => ['in', $next_jur_id],
|
||
'is_menu' => 1,
|
||
'user_type' => $param['next_user_type'],
|
||
];
|
||
break;
|
||
default:
|
||
$listMap = [];
|
||
$checkMap = [];
|
||
}
|
||
// 1.2获取权限列表
|
||
$list = $JurListModel->getSelect($listMap, $fields, 'type asc,sort asc');
|
||
// 2.3获取已有权限id列表
|
||
$checkIds = [];
|
||
if (!empty($param['next_id']) && !empty($checkMap)) {
|
||
$checkIds = $JurListModel->getFindField($checkMap, 'id', true);
|
||
if (empty($list)) {
|
||
return callBack(statusCode()['error'], '操作有误');
|
||
}
|
||
}
|
||
$newList = $this->generateTree($list, $checkIds);
|
||
|
||
if ($param['operate_type'] == 2) {
|
||
//处理含有下级菜单、但是下级菜单权限全部被限制的情况的菜单栏
|
||
$newList = $this->handleOutMenuAuth($newList);
|
||
}
|
||
if (empty($newList)) {
|
||
return callBack(statusCode()['error'], '操作有误');
|
||
}
|
||
$data = [
|
||
'list' => $newList,
|
||
'checkIds' => $checkIds,
|
||
];
|
||
if ($param['operate_type'] == 1) {
|
||
$data['roleInfo'] = $roleInfo;
|
||
}
|
||
return callBack(statusCode()['success'], '获取成功', $data);
|
||
}
|
||
|
||
/**
|
||
* 保存权限节点设置
|
||
* @param $param
|
||
* $param['operate_type'] 操作类型 1自己权限详细的节点(给自己后台的自定义用户组权限) 2菜单栏(给下级用户组的权限)
|
||
* $param['group_id'] 自己权限的分组的列表的ID
|
||
* $param['operator_id'] 操作的用户在权限用户表的ID
|
||
* $param['next_user_type'] 子集所属后台角色功能类型/下级用户类型 1合伙人 2代理商 3商户 4门店 5导购员 6收银员
|
||
* $param['next_id'] 下级用户对应的表的ID(operate_type==1:权限组表的ID;operate_type==2:代理商/商户/门店/导购员/收银员表ID)
|
||
* $param['checkIds'] 已选的权限节点ID列表(逗号','拼接的字符串)
|
||
* $param['role_name'] 操作子集角色时:角色名称
|
||
* $param['status'] 操作子集角色时:子集角色的状态
|
||
* @return mixed
|
||
*/
|
||
public function setRole($param)
|
||
{
|
||
if (!$this->verifyParam($param)) {
|
||
return callBack(statusCode()['error'], $this->errMsg);
|
||
}
|
||
if (!$param['checkIds']) {
|
||
return callBack(statusCode()['error'], '权限不能为空');
|
||
}
|
||
//获取已选权限详情
|
||
$JurListModel = new JurisdictionListModel();
|
||
$authList = $JurListModel->getSelect(['id' => ['in', $param['checkIds']]], 'id,pid,type');
|
||
if (empty($authList)) {
|
||
return callBack(statusCode()['error'], '操作有误');
|
||
}
|
||
|
||
//获取下级的权限ID
|
||
$JurGroupModel = new JurisdictionGroupModel();
|
||
$JurUserModel = new JurisdictionUserModel();
|
||
$StoreModel = new RetailStoreModel();
|
||
$ManagerModel = new RetailManagerModel();
|
||
$next_user_id = 0;//被操作的用户在用户表的ID
|
||
switch ($param['operate_type']) {
|
||
case 1:
|
||
//自定义角色的权限
|
||
if (empty($param['role_name'])) {
|
||
return callBack(statusCode()['error'], '角色名称不能为空');
|
||
}
|
||
if (!in_array($param['status'], ['1', '2'])) {
|
||
return callBack(statusCode()['error'], '角色状态有误');
|
||
}
|
||
$fMap = [
|
||
'role_name' => $param['role_name'],
|
||
'create_user_id' => $param['operator_id'],
|
||
'state' => 1,
|
||
'id' => ['neq', $param['next_id'] ? $param['next_id'] : 0],
|
||
];
|
||
$find = $JurGroupModel->getCount($fMap);
|
||
if (!empty($find)) {
|
||
return callBack(statusCode()['error'], '该角色名称被使用,请更换名称');
|
||
}
|
||
$next_group_id = $param['next_id'];
|
||
break;
|
||
case 2:
|
||
//下级用户的权限
|
||
switch ($param['next_user_type']) {
|
||
case 2:
|
||
case 3:
|
||
case 5:
|
||
case 6:
|
||
//代理商 商户 导购员 收银员
|
||
$next_user = $JurUserModel->getFind([
|
||
'user_type' => $param['next_user_type'],
|
||
'system_user_id' => $param['next_id']
|
||
], 'id,jurisdiction_group_id');
|
||
$next_user_id = $next_user['id'];
|
||
$next_group_id = $next_user['jurisdiction_group_id'];
|
||
break;
|
||
case 4:
|
||
//门店
|
||
$next_group_id = $StoreModel->getFindField(['id' => $param['next_id']], 'jur_group_id');
|
||
//获取所有店长的ID
|
||
$manager_id = $ManagerModel->getFindField(['storeid' => $param['next_id'], 'status' => 1], 'id', true);
|
||
if (!empty($manager_id)) {
|
||
//获取所有店长在用户表的ID
|
||
$next_user_id = $JurUserModel->getFindField(['system_user_id' => ['in', $manager_id], 'user_type' => 1, 'state' => 1], 'id', true);
|
||
}
|
||
break;
|
||
default:
|
||
$next_group_id = 0;
|
||
}
|
||
break;
|
||
default:
|
||
$next_group_id = 0;
|
||
}
|
||
if ($param['operate_type'] == 2 || !empty($param['next_id'])) {
|
||
if (empty($next_group_id)) {
|
||
return callBack(statusCode()['error'], '操作有误');
|
||
}
|
||
//原始权限ID列表
|
||
$before_jur = $JurGroupModel->getFindField(['id' => $next_group_id], 'jurisdiction_id');
|
||
$before_arr = explode(',', $before_jur);
|
||
// print_r($before_arr);
|
||
} else {
|
||
$before_jur = '';
|
||
$before_arr = [];
|
||
}
|
||
//实际已选的权限ID列表
|
||
$after_jur = explode(',', $param['checkIds']);
|
||
|
||
//查询之前下级用户是否拥有被删除的权限
|
||
$limitMap['id'] = ['in', $before_jur];
|
||
$old_limit_id = $JurListModel->getFindField($limitMap, 'limit_id', true);
|
||
$old_limit_id = implode(',', $old_limit_id);
|
||
$old_limit_id = explode(',', $old_limit_id);
|
||
|
||
//处理实际操作后的权限
|
||
$this->getActualCheckIds($authList, $after_jur);
|
||
|
||
//查询有限制下级权限的权限的权限ID
|
||
$limitMap = [
|
||
'is_menu' => 1,
|
||
'id' => ['not in', $after_jur],
|
||
'limit_id' => ['neq', ''],
|
||
'user_type' => $param['next_user_type'],
|
||
];
|
||
$del_limit_id = $JurListModel->getFindField($limitMap, 'limit_id', true);
|
||
if ($del_limit_id) {
|
||
$del_limit_id = implode(',', $del_limit_id);
|
||
$del_limit_id = explode(',', $del_limit_id);
|
||
}
|
||
|
||
if ($param['operate_type'] == 2 && $param['next_user_type'] == 3) {
|
||
//商户需要查询原有的门店权限 且追加门店权限
|
||
$store_jur_id = $JurListModel->getFindField(['id' => ['in', $before_jur], 'user_type' => 4], 'id', true);
|
||
if (!empty($old_limit_id) && !empty($del_limit_id)) {
|
||
//去除被删除的门店被限制的权限
|
||
$new_store_jur_id = $this->delArrKey(implode(',', $store_jur_id), $del_limit_id, false);
|
||
$after_jur = array_merge($after_jur, $new_store_jur_id);
|
||
} else if (!empty($store_jur_id)) {
|
||
$after_jur = array_merge($after_jur, $store_jur_id);
|
||
}
|
||
//给商户增加新增的限制的门店权限
|
||
$temp_add_jur = array_diff($after_jur, $before_arr);
|
||
if (!empty($temp_add_jur)) {
|
||
$addLimitMap = [
|
||
'is_menu' => 1,
|
||
'limit_id' => ['neq', ''],
|
||
'user_type' => $param['next_user_type'],
|
||
'id' => ['in', $temp_add_jur],//ID在新增的已选权限里
|
||
];
|
||
|
||
$add_limit_id = $JurListModel->getFindField($addLimitMap, 'limit_id', true);
|
||
if (!empty($add_limit_id)) {
|
||
$add_limit_id = implode(',', $add_limit_id);
|
||
$add_limit_id = explode(',', $add_limit_id);
|
||
$after_jur = array_merge($after_jur, $add_limit_id);
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
sort($after_jur);//排序
|
||
//把保存的权限转为逗号','拼接的字符串
|
||
$after_str = implode(',', $after_jur);
|
||
|
||
//提取删除的权限ID列表
|
||
$del_jur = array_diff($before_arr, $after_jur);
|
||
$del_jur = array_reverse($del_jur);//从0开始排序
|
||
|
||
//提取新增的权限ID列表
|
||
$add_jur = array_diff($after_jur, $before_arr);
|
||
|
||
M()->startTrans();
|
||
$saveData = [
|
||
'jurisdiction_id' => $after_str,
|
||
];
|
||
if ($param['operate_type'] == 1) {
|
||
$saveData['role_name'] = $param['role_name'];
|
||
$saveData['create_user'] = $param['next_user_type'];
|
||
$saveData['create_user_id'] = $param['operator_id'];
|
||
$saveData['status'] = $param['status'];
|
||
}
|
||
if ($param['operate_type'] == 2 || !empty($param['next_id'])) {
|
||
//修改角色或用户的权限
|
||
$update = $JurGroupModel->updateOrder(['id' => $next_group_id], $saveData);
|
||
} else {
|
||
//新增角色
|
||
$saveData['add_time'] = time();
|
||
$update = $JurGroupModel->addOrder($saveData);
|
||
$next_group_id = $update;
|
||
}
|
||
if ($update) {
|
||
$details = [];
|
||
$map = [
|
||
'is_menu' => 1,
|
||
];
|
||
switch ($param['operate_type']) {
|
||
case 1:
|
||
unset($map['is_menu']);
|
||
break;
|
||
case 2:
|
||
$map['user_type'] = $param['next_user_type'];
|
||
break;
|
||
}
|
||
if (!empty($del_jur)) {
|
||
$map['id'] = ['in', $del_jur];
|
||
$data = $JurListModel->getSelect($map, 'id,pid,name,is_menu');
|
||
$delTree = $this->generateTree($data);
|
||
$this->getOperateContent($delTree, $details, '关闭:');
|
||
|
||
//删除下级用户的已选权限
|
||
if (!empty($next_user_id)) {
|
||
switch ($param['operate_type']) {
|
||
case 1:
|
||
break;
|
||
case 2:
|
||
//需要删除被操作的用户的子集和下级的权限
|
||
//1 删除子集权限
|
||
//1.1 获取被操作的用户在权限组表的ID
|
||
$childMap = [
|
||
'first_pid' => ['in', $next_user_id],
|
||
'user_type' => 0,
|
||
'state' => 1,
|
||
];
|
||
$next_user_group_id = $JurUserModel->getFindField($childMap, 'jurisdiction_group_id', true);
|
||
$del = !empty($next_user_group_id) ? $this->delChildJur($next_user_group_id, $del_jur) : true;
|
||
if (!$del) {
|
||
M()->rollback();
|
||
return callBack(statusCode()['error'], '保存失败');
|
||
}
|
||
|
||
//2 删除下级的权限
|
||
//2.1 查询需要删除的权限ID列表
|
||
switch ($param['next_user_type']) {
|
||
case 3:
|
||
//商户 查询是否有限制门店使用的权限被删除
|
||
if (!empty($old_limit_id) && !empty($del_limit_id)) {
|
||
//删除商户下的门店被限制的ID
|
||
$store_jur_list = $StoreModel->getSelect(['merchantid' => $param['next_id'], 'state' => 0], 'jur_group_id');
|
||
|
||
foreach ($store_jur_list as $value) {
|
||
$del = $this->delChildJur($value['jur_group_id'], $del_limit_id);
|
||
if (!$del) {
|
||
M()->rollback();
|
||
return callBack(statusCode()['error'], '保存失败');
|
||
}
|
||
}
|
||
//获取所有的店长ID,找到店长添加的新角色的列表,删除门店被限制的ID
|
||
$store_manager_id = $ManagerModel->getFindField(['merchantid' => $param['next_id'], 'status' => 1], 'id', true);
|
||
if (!empty($store_manager_id)) {
|
||
//获取店长在角色表的ID列表
|
||
$manager_user_id = $JurUserModel->getFindField(['system_user_id' => ['in', $store_manager_id], 'user_type' => 4], 'id', true);
|
||
if (!empty($manager_user_id)) {
|
||
//获取下级用户的权限组表ID列表
|
||
$childMap['first_pid'] = ['in', $manager_user_id];
|
||
$store_user_group_id = $JurUserModel->getSelect($childMap, 'jurisdiction_group_id');
|
||
foreach ($store_user_group_id as $val) {
|
||
$del = $this->delChildJur($val['jurisdiction_group_id'], $del_limit_id);
|
||
if (!$del) {
|
||
M()->rollback();
|
||
return callBack(statusCode()['error'], '保存失败');
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 4:
|
||
//门店
|
||
break;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if (!empty($add_jur)) {
|
||
$map['id'] = ['in', $add_jur];
|
||
$data = $JurListModel->getSelect($map, 'id,pid,name');
|
||
$addTree = $this->generateTree($data);
|
||
$this->getOperateContent($addTree, $details, '开启:');
|
||
}
|
||
$record = [
|
||
'add_time' => time(),
|
||
'operator_id' => $param['operator_id'],
|
||
'jur_group_id' => $next_group_id,
|
||
'before_jur_id' => $before_jur,
|
||
'after_jur_id' => $after_str,
|
||
'details' => implode(',', $details),
|
||
];
|
||
$JurRecordModel = new JurisdictionRecordModel();
|
||
$add_record = $JurRecordModel->addOrder($record);
|
||
if ($add_record) {
|
||
M()->commit();
|
||
return callBack(statusCode()['success'], '保存成功');
|
||
} else {
|
||
M()->rollback();
|
||
return callBack(statusCode()['error'], '保存失败');
|
||
}
|
||
} else {
|
||
return callBack(statusCode()['error'], '暂无修改');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取权限修改记录
|
||
* @param $param
|
||
* $param['operate_type'] 操作类型 1自己权限详细的节点(给自己后台的自定义用户组权限) 2菜单栏(给下级用户组的权限)
|
||
* $param['group_id'] 自己权限的分组的列表的ID
|
||
* $param['operator_id'] 操作的用户在权限用户表的ID
|
||
* $param['next_user_type'] 下级用户类型 1合伙人 2代理商 3商户 4门店 5导购员 6收银员
|
||
* $param['next_id'] 下级用户对应的表的ID(operate_type==1:权限组表的ID;operate_type==2:代理商/商户/门店/导购员/收银员表ID)
|
||
* $param['checkIds'] 已选的权限节点ID列表(逗号','拼接的字符串)
|
||
* $param['operator_user_id'] 添加记录的用户ID
|
||
* $param['page'] 页码
|
||
* $param['limit'] 每页读取数量
|
||
* @return mixed
|
||
*/
|
||
public function getRoleRecord($param)
|
||
{
|
||
if (!$this->verifyParam($param)) {
|
||
return callBack(statusCode()['error'], $this->errMsg);
|
||
}
|
||
if (!$param['page'] || !$param['limit']) {
|
||
return callBack(statusCode()['error'], '页码和每页读取数量不能为空');
|
||
}
|
||
$JurRecordModel = new JurisdictionRecordModel();
|
||
$map = [];
|
||
$JurUserModel = new JurisdictionUserModel();
|
||
switch ($param['operate_type']) {
|
||
case 1:
|
||
$map['jur_group_id'] = $param['next_id'];
|
||
break;
|
||
case 2:
|
||
switch ($param['next_user_type']) {
|
||
case 2:
|
||
case 3:
|
||
case 5:
|
||
case 6:
|
||
//代理商 商户 导购员 收银员
|
||
$next_group_id = $JurUserModel->getFindField([
|
||
'user_type' => $param['next_user_type'],
|
||
'system_user_id' => $param['next_id']
|
||
], 'jurisdiction_group_id');
|
||
break;
|
||
case 4:
|
||
//门店
|
||
$StoreModel = new RetailStoreModel();
|
||
$next_group_id = $StoreModel->getFindField(['id' => $param['next_id']], 'jur_group_id');
|
||
break;
|
||
default:
|
||
$next_group_id = 0;
|
||
}
|
||
$map['jur_group_id'] = $next_group_id;
|
||
break;
|
||
}
|
||
if (!empty($param['operator_user_id'])) {
|
||
$map['operator_id'] = $param['operator_user_id'];
|
||
}
|
||
$list = $JurRecordModel->getSelect($map, 'id,operator_id,add_time,details', 'id desc', $param['page'] . ',' . $param['limit']);
|
||
$operator = [];
|
||
$count = 0;
|
||
if ($list) {
|
||
foreach ($list as &$val) {
|
||
$val['add_time'] = newDate('Y-m-d H:i:s', $val['add_time']);
|
||
$val['details'] = explode(',', $val['details']);
|
||
if (!isset($operator[$val['operator_id']])) {
|
||
$operator[$val['operator_id']] = $JurUserModel->getFindField(['id' => $val['operator_id']], 'name');
|
||
}
|
||
$val['operator_name'] = $operator[$val['operator_id']];
|
||
}
|
||
$count = $JurRecordModel->getCount($map);
|
||
}
|
||
|
||
return callBack(statusCode()['success'], $list ? '获取成功' : '暂无数据', [
|
||
'list' => $list,
|
||
'count' => $count,
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* 获取操作者列表-供选择
|
||
* @param $param
|
||
* $param['user_id'] 当前登录的用户在角色用户表的ID
|
||
* $param['user_type'] 当前登录的用户类型 0自定义用户 1合伙人 2代理商 3商户 4门店 5导购员 6收银员
|
||
* $param['first_pid'] 当前登录的用户所属系统角色在用户表的ID
|
||
* $param['operator_id'] 操作人ID,可按照操作的人进行筛选
|
||
* @return mixed
|
||
*/
|
||
public function getOperatorList($param)
|
||
{
|
||
if (empty($param['user_id']) || !isset($param['user_type']) || $param['user_type'] === 0 && empty($param['first_pid'])) {
|
||
return callBack(statusCode()['error'], '缺少参数');
|
||
}
|
||
switch ($param['user_type']) {
|
||
case 0:
|
||
//自定义角色的用户
|
||
$first_pid = $param['first_pid'];
|
||
break;
|
||
default:
|
||
//系统用户
|
||
$first_pid = $param['user_id'];
|
||
}
|
||
$map = [
|
||
'state' => 1,
|
||
'status' => 1,
|
||
[
|
||
['user_type' => 0, 'first_pid' => $first_pid,],
|
||
'id' => $first_pid,
|
||
'_logic' => 'OR',
|
||
]
|
||
];
|
||
if (!empty($param['operator_id'])) {
|
||
$map['operator_id'] = $param['operator_id'];
|
||
}
|
||
$JurUserModel = new JurisdictionUserModel();
|
||
$list = $JurUserModel->getSelect($map, 'id,name', 'id asc');
|
||
return callBack(statusCode()['success'], '获取成功', [
|
||
'list' => $list
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* 新增代理商、商户、门店、导购员、收银员时生成系统权限
|
||
* @param
|
||
* $param['type'] 1合伙人 2代理商 3商户 4门店 5导购员 6收银员
|
||
* $param['platform_type'] 添加商户时所需商户类型 1系统默认类型 2第三方微礼平台
|
||
* $param['store_id'] 门店ID
|
||
* $param['merchant_id'] 商户ID
|
||
* @return mixed
|
||
*/
|
||
public function createSystemGroup($param)
|
||
{
|
||
$group_id = '';
|
||
$JurGroupModel = new JurisdictionGroupModel();
|
||
switch ($param['type']) {
|
||
case 1:
|
||
//合伙人暂不支持生成权限
|
||
break;
|
||
case 2:
|
||
case 3:
|
||
case 5:
|
||
case 6:
|
||
//代理商 商户 导购员 收银员
|
||
$group = $JurGroupModel->getFindTrue(['id' => $param['type']], 'id');
|
||
if ($param['type'] == 3 && $param['platform_type'] == 2) {
|
||
//添加商户时商户类型为第三方Q3平台
|
||
//去除进销存与采购资金管理权限
|
||
$JurListModel = new JurisdictionListModel();
|
||
$authList = $JurListModel->getSelect(['id' => ['in', [206, 808, 936, 946]]], 'id,pid,type');
|
||
$group_arr = explode(',', $group['jurisdiction_id']); //全部权限集合
|
||
$reject_group_arr = []; //拒绝的权限id
|
||
$this->getActualCheckIds($authList, $reject_group_arr, 2);
|
||
$diff = array_diff($group_arr, $reject_group_arr);
|
||
if (!empty($diff)) {
|
||
$group['jurisdiction_id'] = implode(',', $diff);
|
||
}
|
||
}
|
||
$group['add_time'] = time();
|
||
$group_id = $JurGroupModel->addOrder($group);
|
||
break;
|
||
case 4:
|
||
//添加门店
|
||
//获取系统门店权限
|
||
$store_jur = $JurGroupModel->getFindField(['id' => $param['type']], 'jurisdiction_id');
|
||
$store_jur = explode(',', $store_jur);
|
||
$JurUserModel = new JurisdictionUserModel();
|
||
//获取商户权限组ID
|
||
$merchant_jur_id = $JurUserModel->getFindField(['system_user_id' => $param['merchant_id'], 'user_type' => 3], 'jurisdiction_group_id');
|
||
//获取商户权限
|
||
$merchant_jur = $JurGroupModel->getFindField(['id' => $merchant_jur_id], 'jurisdiction_id');
|
||
$merchant_jur = explode(',', $merchant_jur);
|
||
//剔除门店不该有的权限
|
||
$del_jur = array_diff($store_jur, $merchant_jur);
|
||
$del_jur = array_reverse($del_jur);//从0开始排序
|
||
$jur_id_str = $this->delArrKey($store_jur, $del_jur, false);
|
||
|
||
//追加门店用户管理和角色管理(这个权限商户没有)
|
||
$JurListModel = new JurisdictionListModel();
|
||
$authList = $JurListModel->getSelect(['id' => ['in', [705, 709]]], 'id,pid,type');
|
||
$this->getActualCheckIds($authList, $jur_id_str);
|
||
//生成门店权限
|
||
$item = [
|
||
'role_name' => '门店',
|
||
'jurisdiction_id' => implode(',', $jur_id_str),
|
||
'add_time' => time(),
|
||
'create_user' => 0,
|
||
'create_user_id' => 0,
|
||
];
|
||
$group_id = $JurGroupModel->addOrder($item);
|
||
break;
|
||
case -4:
|
||
//店长
|
||
$StoreModel = new RetailStoreModel();
|
||
$group_id = $StoreModel->getFindField(['id' => $param['store_id']], 'jur_group_id');
|
||
break;
|
||
}
|
||
return $group_id;
|
||
}
|
||
|
||
/**
|
||
* 获取用户自定义的角色列表
|
||
* @param $param
|
||
* $param['operator_id'] 当前操作者ID
|
||
* $param['user_type'] 当前操作者登录类型
|
||
* $param['page'] 页码
|
||
* $param['limit'] 每页数量
|
||
* @return mixed
|
||
*/
|
||
public function getRoleList($param)
|
||
{
|
||
if (empty($param['operator_id']) || empty($param['user_type'])) {
|
||
return callBack(statusCode()['error'], '参数有误');
|
||
} else {
|
||
$map = [
|
||
'create_user_id' => $param['operator_id'],
|
||
'create_user' => $param['user_type'],
|
||
'state' => 1,
|
||
];
|
||
$JurGroupModel = new JurisdictionGroupModel();
|
||
$list = $JurGroupModel->getSelect($map, '*', 'id asc', $param['page'] . ',' . $param['limit']);
|
||
$count = $JurGroupModel->getCount($map);
|
||
foreach ($list as $key => &$value) {
|
||
$value['add_time'] = date('Y-m-d H:i:s', $value['add_time']);
|
||
}
|
||
return callBack(statusCode()['success'], !empty($list) ? '获取成功' : '暂无数据', [
|
||
'list' => $list,
|
||
'count' => $count,
|
||
]);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 修改自定义角色的状态
|
||
* @param $param
|
||
* $param['id'] 角色ID
|
||
* $param['source'] 来源:0pc后台系统 1小助手
|
||
* $param['user_type'] 平台:1合伙人端 2代理商端 3商户端 4门店端
|
||
* @return mixed
|
||
*/
|
||
public function changeCustomerRoleStatus($param)
|
||
{
|
||
if (empty($param['id']) || !in_array($param['source'], [0, 1]) || !in_array($param['user_type'], [1, 2, 3, 4])) {
|
||
return callBack(statusCode()['success'], '请求参数有误');
|
||
}
|
||
$JurGroupModel = new JurisdictionGroupModel();
|
||
$status = $JurGroupModel->getFindField(['id' => $param['id']], 'status');
|
||
$save = $JurGroupModel->updateOrder(['id' => $param['id']], ['status' => $status == 1 ? 2 : 1]);
|
||
if ($save) {
|
||
//操作日志记录
|
||
$request_data = json_encode($_POST);//请求参数 json数据
|
||
if ($status == 1) {
|
||
$desc = '角色管理-开启状态';//操作行为描述
|
||
} else {
|
||
$desc = '角色管理-关闭状态';//操作行为描述
|
||
}
|
||
action_log($param['source'], $param['user_type'], $request_data, $desc);
|
||
return callBack(statusCode()['success'], '修改成功');
|
||
} else {
|
||
return callBack(statusCode()['error'], '修改失败');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 删除自定义角色
|
||
* @param $param
|
||
* $param['id'] 角色ID
|
||
* $param['source'] 来源:0pc后台系统 1小助手
|
||
* $param['user_type'] 平台:1合伙人端 2代理商端 3商户端 4门店端
|
||
* @return mixed
|
||
*/
|
||
public function delCustomerRole($param)
|
||
{
|
||
if (empty($param['id']) || !in_array($param['source'], [0, 1]) || !in_array($param['user_type'], [1, 2, 3, 4])) {
|
||
return callBack(statusCode()['success'], '请求参数有误');
|
||
}
|
||
$JurUserModel = new JurisdictionUserModel();
|
||
$map = [
|
||
'jurisdiction_group_id' => $param['id'],
|
||
'state' => 1,
|
||
];
|
||
$user = $JurUserModel->getCount($map);
|
||
if (!empty($user)) {
|
||
return callBack(statusCode()['error'], '该角色下有用户,不能删除');
|
||
}
|
||
$JurGroupModel = new JurisdictionGroupModel();
|
||
$del = $JurGroupModel->updateOrder(['id' => $param['id']], ['state' => 0]);
|
||
if ($del) {
|
||
//操作日志记录
|
||
$request_data = json_encode($_POST);//请求参数 json数据
|
||
$desc = '角色管理-删除';//操作行为描述
|
||
action_log($param['source'], $param['user_type'], $request_data, $desc);
|
||
return callBack(statusCode()['success'], '删除成功');
|
||
} else {
|
||
return callBack(statusCode()['error'], '删除失败');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 商户后台->门店管理->门店的使用限制
|
||
* @param $store_id 门店id
|
||
* @return mixed
|
||
*/
|
||
public function storeUseLimit($store_id)
|
||
{
|
||
//获取门店的权限组id
|
||
$StoreModel = new RetailStoreModel();
|
||
$group_id = $StoreModel->getFindField([
|
||
'id' => $store_id
|
||
], 'jur_group_id');
|
||
if (empty($group_id)) {
|
||
return callBack(statusCode()['error'], '该门店缺少权限组标识');
|
||
}
|
||
//获取权限id
|
||
$GroupModel = new JurisdictionGroupModel();
|
||
$jurisdiction_id = $GroupModel->getFindField([
|
||
'id' => $group_id
|
||
], 'jurisdiction_id');
|
||
$jurisdiction_id = explode(',', $jurisdiction_id);
|
||
//生成暂无权限的集合
|
||
$not_arr = []; //无权限的集合
|
||
$result = $this->storeUseLimitNeedGather();
|
||
$verify_id_arr = $result['verify_id_arr']; //需要验证的权限id集合
|
||
$arr = $result['arr']; //id对应的标识集合
|
||
$difference = array_diff($verify_id_arr, $jurisdiction_id);//差集
|
||
if (!empty($difference)) {
|
||
foreach ($difference as $val) {
|
||
$data = $arr[$val];
|
||
if (is_array($data)) {
|
||
foreach ($data as $v) {
|
||
if (in_array($v, $not_arr)) {
|
||
continue;
|
||
}
|
||
$not_arr[] = $v;
|
||
}
|
||
} else {
|
||
if (in_array($data, $not_arr)) {
|
||
continue;
|
||
}
|
||
$not_arr[] = $data;
|
||
}
|
||
}
|
||
}
|
||
return $not_arr;
|
||
}
|
||
|
||
/**
|
||
* 门店使用限制需要验证的权限id集合
|
||
* @return array
|
||
*/
|
||
public function storeUseLimitNeedGather()
|
||
{
|
||
//需要验证的权限id集合
|
||
$verify_id_arr = [
|
||
430, 433, 434, 440, 441, 442, 444, 450, 471, 472, 490, 518, 582, 583, 584, 585, 586, 587, 594, 686, 694, 809, 875, 880,
|
||
946, 971, 1120, 1139, 1163, 1175,
|
||
];
|
||
//id对应的标识集合
|
||
$arr = [
|
||
430 => ['addgoods', 'editgoods', 'showpurch_price', 'edit_price'],//添加商品 编辑商品 查看进价 修改商品价格
|
||
434 => ['synchro_goods', 'cost_price'], //门店同步商品 同步成本价
|
||
440 => 'batch_editgoods', //批量修改商品
|
||
441 => 'batch_editgoodsclass', //批量修改分类
|
||
442 => 'delgoods', //批量删除商品
|
||
444 => 'batch_delgoods', //删除商品
|
||
450 => 'edit_goods_class', //管理商品分类
|
||
471 => 'store_xcx_info', //门店设置
|
||
472 => 'store_xcx_distribution_fee', //配送费
|
||
490 => 'store_goods_promotion', //促销商品
|
||
518 => 'store_coupon', //门店优惠券
|
||
582 => 'store_show_vip_info', //是否显示所有会员
|
||
583 => 'store_operation_vip', //会员操作权限
|
||
584 => 'store_operation_vip', //会员操作权限
|
||
585 => 'store_operation_vip', //会员操作权限
|
||
586 => 'store_operation_vip', //会员操作权限
|
||
587 => ['store_operation_vip', 'store_edit_vip_info'], //会员操作权限 编辑会员信息
|
||
594 => 'store_edit_vip_info', //编辑会员信息
|
||
686 => 'addcashier', //添加收银员
|
||
694 => 'addguide', //添加导购员
|
||
809 => 'purchase', //是否开启采购管理
|
||
875 => 'allocation', //是否可以编辑调拨价
|
||
880 => 'store_allocation', //门店之间调拨审核
|
||
946 => 'capital', //资金管理
|
||
971 => 'store_operation_vip', //会员操作权限
|
||
1120 => 'home_diy', //diy设置
|
||
1139 => 'operate_vip_coupon', //门店会员优惠券
|
||
1163 => 'edit_goods_label', //标签
|
||
1175 => 'store_ordinary_operation_vip', //普通成员操作权限
|
||
]; //需要验证的权限id集合
|
||
return [
|
||
'verify_id_arr' => $verify_id_arr,
|
||
'arr' => $arr
|
||
];
|
||
}
|
||
|
||
/**
|
||
* 新增权限后,给系统角色补充权限
|
||
* @param $user_type 用户类型
|
||
* @param $jur_str 权限字符集,逗号拼接
|
||
*/
|
||
public function updateSystemUserAuth($user_type, $jur_str)
|
||
{
|
||
if (!in_array($user_type, ['2', '3', '4', '5', '6']) || !$jur_str) return;
|
||
$map = [
|
||
'u.state' => 1,
|
||
'u.user_type' => $user_type,
|
||
];
|
||
$list = M('jurisdiction_user as u')
|
||
->join('ls_jurisdiction_group as g ON u.jurisdiction_group_id=g.id')
|
||
->where($map)->field('g.id,g.jurisdiction_id')
|
||
->group('u.jurisdiction_group_id')->select();
|
||
foreach ($list as $value) {
|
||
$jur = $value['jurisdiction_id'] ? ($value['jurisdiction_id'] . ',' . $jur_str) : $jur_str;
|
||
$jur = explode(',', $jur);
|
||
$jur = array_flip($jur);
|
||
$jur = array_flip($jur);
|
||
sort($jur);
|
||
$save = [
|
||
'jurisdiction_id' => implode(',', $jur),
|
||
];
|
||
M('jurisdiction_group')->where(['id' => $value['id']])->save($save);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 重置系统角色用户权限为初始状态
|
||
* @param $param
|
||
* $param['operator_id'] 操作的用户在权限用户表的ID
|
||
* $param['next_id'] 下级用户对应的表的ID(operate_type==1:权限组表的ID;operate_type==2:代理商/商户/门店/导购员/收银员表ID)
|
||
* $param['next_user_type'] 子集所属后台角色功能类型/下级用户类型 1合伙人 2代理商 3商户 4门店 5导购员 6收银员
|
||
* @return mixed
|
||
*/
|
||
public function resetUserRole($param)
|
||
{
|
||
$JurUserModel = new JurisdictionUserModel();
|
||
$StoreModel = new RetailStoreModel();
|
||
switch ($param['next_user_type']) {
|
||
case 2:
|
||
case 3:
|
||
case 5:
|
||
case 6:
|
||
//代理商 商户 导购员 收银员
|
||
$next_group_id = $JurUserModel->getFindField([
|
||
'user_type' => $param['next_user_type'],
|
||
'system_user_id' => $param['next_id']
|
||
], 'jurisdiction_group_id');
|
||
break;
|
||
case 4:
|
||
//门店
|
||
$next_group_id = $StoreModel->getFindField(['id' => $param['next_id']], 'jur_group_id');
|
||
break;
|
||
default:
|
||
$next_group_id = 0;
|
||
}
|
||
if (empty($next_group_id)) {
|
||
return callBack(statusCode()['error'], '操作有误');
|
||
}
|
||
$JurGroupModel = new JurisdictionGroupModel();
|
||
|
||
//获取用户类型该有的所有权限
|
||
$after_str = $JurGroupModel->getFindField(['id' => $param['next_user_type']], 'jurisdiction_id');
|
||
|
||
//获取用户原有权限
|
||
$before_jur = $JurGroupModel->getFindField(['id' => $next_group_id], 'jurisdiction_id');
|
||
|
||
//更新用户权限
|
||
M()->startTrans();
|
||
$update = $JurGroupModel->updateOrder(['id' => $next_group_id], ['jurisdiction_id' => $after_str]);
|
||
if ($update) {
|
||
//添加权限操作记录
|
||
$record = [
|
||
'add_time' => time(),
|
||
'operator_id' => $param['operator_id'],
|
||
'jur_group_id' => $next_group_id,
|
||
'before_jur_id' => $before_jur,
|
||
'after_jur_id' => $after_str,
|
||
'details' => '重置权限',
|
||
];
|
||
$JurRecordModel = new JurisdictionRecordModel();
|
||
$add_record = $JurRecordModel->addOrder($record);
|
||
if ($add_record) {
|
||
M()->commit();
|
||
return callBack(statusCode()['success'], '操作成功');
|
||
} else {
|
||
M()->rollback();
|
||
return callBack(statusCode()['error'], '保存失败');
|
||
}
|
||
} else {
|
||
return callBack(statusCode()['error'], '操作失败');
|
||
}
|
||
}
|
||
|
||
|
||
/**************************以下为私有方法****************************/
|
||
|
||
/**
|
||
* 数组转换为树型数据
|
||
* @param array $array 需要转换的数组
|
||
* @param array &$checkIds 选中的唯一值列表(处理成为仅有最底级的唯一值数组),空数组则不处理
|
||
* @param string $pkName 唯一值的字段名
|
||
* @param string $pIdName 与唯一值进行关联的字段名
|
||
* @param string $childName 定义子集的名称
|
||
* @return array
|
||
*/
|
||
function generateTree($array = [], &$checkIds = [], $pkName = 'id', $pIdName = 'pid', $childName = 'children')
|
||
{
|
||
//第一步 构造数据
|
||
$new_check = array_flip($checkIds);
|
||
$items = array_column($array, null, $pkName);
|
||
//第二步 遍历构造的数据
|
||
$tree = [];
|
||
$len = count($checkIds);
|
||
foreach ($items as $key => $value) {
|
||
//如果$pIdName这个节点存在
|
||
if (isset($items[$value[$pIdName]])) {
|
||
//把当前的$value放到$pIdName节点的$childName中 注意 这里传递的是引用 因为当对items做更改时,tree数组中的相对应的值也一并做了更改
|
||
$items[$value[$pIdName]][$childName][] = &$items[$key];
|
||
|
||
//删除已选唯一值列表中的父级
|
||
if ($len > 0 && isset($new_check[$items[$value[$pIdName]][$pkName]])) {
|
||
unset($new_check[$items[$value[$pIdName]][$pkName]]);
|
||
}
|
||
} else {
|
||
$tree[] = &$items[$key];
|
||
}
|
||
}
|
||
$checkIds = [];
|
||
foreach ($new_check as $k => $v) {
|
||
$checkIds[] = $k;
|
||
}
|
||
return $tree;
|
||
}
|
||
|
||
/**
|
||
* 处理实际需要保存的ID列表
|
||
* @param $data 前台传输的ID对应的数据列表
|
||
* @param $ids 当前已保存的ID列表
|
||
* @param int $type 获取类型 0上下级都需要查询 1往上查询 2往下查询
|
||
* @param string $fields 读取的字段
|
||
* @param array $map 读取字段的条件
|
||
*/
|
||
function getActualCheckIds($data, &$ids, $type = 0, $map = [])
|
||
{
|
||
$JurListModel = new JurisdictionListModel();
|
||
foreach ($data as $value) {
|
||
if (($type == 0 || $type == 1) && $value['pid'] > 0) {
|
||
//查找上一级
|
||
if (isset($map['pid'])) unset($map['pid']);
|
||
$map['id'] = $value['pid'];
|
||
$tempList = $JurListModel->getFind($map, 'id,pid');
|
||
if (!empty($tempList)) $this->getActualCheckIds([$tempList], $ids, 1, $map);
|
||
}
|
||
if ($type == 0 || $type == 2 && !in_array($value['id'], $ids)) {
|
||
//查找下一级
|
||
if (isset($map['id'])) unset($map['id']);
|
||
$map['pid'] = $value['id'];
|
||
$tempList = $JurListModel->getSelect($map, 'id,pid');
|
||
if (!empty($tempList)) $this->getActualCheckIds($tempList, $ids, 2, $map);
|
||
}
|
||
if (!in_array($value['id'], $ids)) {
|
||
$ids[] = $value['id'];
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取操作用户权限的名称集合
|
||
* @param $tree
|
||
* @param array $details
|
||
* @param string $str
|
||
*/
|
||
function getOperateContent($tree, &$details = [], $str = '')
|
||
{
|
||
foreach ($tree as $value) {
|
||
if (isset($value['children'])) {
|
||
$this->getOperateContent($value['children'], $details, $str . $value['name'] . '-');
|
||
} else {
|
||
$details[] = $str . $value['name'];
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 删除子集权限
|
||
* @param $group_id 权限组的ID列表
|
||
* @param $del_jur 被删除的ID数组
|
||
* @return bool
|
||
*/
|
||
function delChildJur($group_id, $del_jur)
|
||
{
|
||
$JurGroupModel = new JurisdictionGroupModel();
|
||
|
||
//1.2 获取子集权限组列表数据
|
||
$group_list = $JurGroupModel->getSelect(['id' => ['in', $group_id]], 'id,jurisdiction_id');
|
||
|
||
//1.3 删除子集权限组列表中父级被删除的数据
|
||
foreach ($group_list as $value) {
|
||
$jur_id_str = $this->delArrKey($value['jurisdiction_id'], $del_jur);
|
||
if ($jur_id_str != $value['jurisdiction_id']) {
|
||
$update = $JurGroupModel->updateOrder(['id' => $value['id']], ['jurisdiction_id' => $jur_id_str]);
|
||
if (!$update) {
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* 去除被删除的ID列表
|
||
* @param $arrayStr 当前权限ID列表
|
||
* @param $delArr 被删除的权限ID列表
|
||
* @param bool $get_string 是否返回字符串
|
||
* @return string
|
||
*/
|
||
function delArrKey($arrayStr, $delArr, $get_string = true)
|
||
{
|
||
//字符串转数组
|
||
$array = is_array($arrayStr) ? $arrayStr : explode(',', $arrayStr);
|
||
|
||
//取出需要删除的ID及下标列表
|
||
$intersect = array_intersect($array, $delArr);
|
||
|
||
if (!empty($intersect)) {
|
||
foreach ($intersect as $k => $val) {
|
||
unset($array[$k]);
|
||
}
|
||
//数组顺序还原
|
||
$tempArr = [];
|
||
foreach ($array as $val) {
|
||
$tempArr[] = $val;
|
||
}
|
||
$array = $tempArr;
|
||
}
|
||
return $get_string ? implode(',', $array) : $array;
|
||
}
|
||
|
||
function handleOutMenuAuth($list)
|
||
{
|
||
$JurListModel = new JurisdictionListModel();
|
||
$tempList = [];
|
||
foreach ($list as &$value) {
|
||
if (empty($value['children'])) {
|
||
$child_menu = $JurListModel->getFindField(['pid' => $value['id'], 'is_menu' => 1], 'id');
|
||
if (empty($child_menu)) $tempList[] = $value;
|
||
} else {
|
||
$temp = $this->handleOutMenuAuth($value['children']);
|
||
if (!empty($temp)) {
|
||
$value['children'] = $temp;
|
||
$tempList[] = $value;
|
||
}
|
||
}
|
||
}
|
||
return $tempList;
|
||
}
|
||
|
||
/**
|
||
* 验证请求参数
|
||
* @param $param
|
||
* $param['operate_type'] 获取类型 1详细的节点 2菜单栏
|
||
* $param['group_id'] 自己权限的分组的列表的ID
|
||
* $param['operator_id'] 操作的用户在权限用户表的ID
|
||
* $param['next_user_type'] 子集所属后台角色功能类型/下级用户类型 1合伙人 2代理商 3商户 4门店 5导购员 6收银员
|
||
* $param['next_id'] 下级用户对应的表的ID(operate_type==1:权限组表的ID;operate_type==2:代理商/商户/门店/导购员/收银员表ID)
|
||
* @return bool
|
||
*/
|
||
function verifyParam($param)
|
||
{
|
||
$role = [
|
||
'operate_type' => ['type' => 'number', 'in' => [1, 2]],
|
||
'operator_id' => ['type' => 'string'],
|
||
'group_id' => ['required' => $param['operate_type'] == 1 ? true : false, 'type' => 'number'],
|
||
'next_id' => ['required' => $param['operate_type'] == 2 ? true : false, 'type' => 'string'],
|
||
'next_user_type' => ['in' => $param['operate_type'] == 2 ? [2, 3, 4, 5, 6] : [1, 2, 3, 4, 5, 6]],
|
||
];
|
||
|
||
$CustomValidate = new CustomValidate([
|
||
'operate_type' => '获取类型',
|
||
'group_id' => '权限组ID',
|
||
'next_id' => $param['operate_type'] == 2 ? '下级用户ID' : '权限组ID',
|
||
'operator_id' => '操作者ID',
|
||
'next_user_type' => '下级用户类型',
|
||
]);
|
||
$result = $CustomValidate->validate($param, $role);
|
||
if ($result['error'] == 1) {
|
||
$this->errMsg = $result['message'];
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
}
|