Files
OMS/app/desktop/lib/roles.php
2025-12-28 23:13:25 +08:00

253 lines
9.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Copyright © ShopeX http://www.shopex.cn. All rights reserved.
* See LICENSE file for license details.
*/
class desktop_roles{
function __construct($app)
{
$this->app=$app;
$this->model = $app->model('roles');
}
//根据工作组获得所有下面的permission
function get_permission_per($menu_id,$wg)
{
$menus = $this->app->model('menus');
$sdf = $menus->dump($menu_id);
$workground = $sdf['workground'];
$aMenus = $menus->getList('*',array('menu_type' => 'menu','workground' => $workground));
$aTmp = array();
$menu_group = array();
foreach($aMenus as $val )
{
$aTmp['menu_group'][] = $val['menu_group'];
$aTmp['permission'][] = $val['permission'];
}
$aMenus = array_unique($aTmp['permission']); //所有的permissions
$permissions = array();
foreach($aMenus as $val)
{
$sdf = $menus->dump(array('menu_type' => 'permission','permission' => $val));
if($sdf){
if(in_array($sdf['permission'],$wg)){
$sdf['checked'] = 1;
}
else{
$sdf['checked'] = 0;
}
$sdf['role_workground'] = $workground;
$permissions[] = $sdf;
}
}
return $permissions;
}
//获取控制面板的permissions
function get_adminpanel($role_id,$wg,&$flg=0)
{
$menus = $this->app->model('menus');
$aPer = $menus->getList('*',array('menu_type' => 'permission','disabled' => 'false'));
$adminpanel_per = array();
foreach((array)$aPer as $val)
{
$aData = $menus->dump(array('menu_type' => 'menu','permission' => $val['permission']));
$__aData = $menus->dump(array('menu_type' => 'adminpanel','permission' => $val['permission']));
if(!$aData && $__aData){
if(in_array($val['permission'],(array)$wg)){
$val['checked'] = 1;
$flg = 1;
}
else{
$val['checked'] = 0;
}
$adminpanel_per[] = $val;
}
}
return $adminpanel_per;
}
////获取其他的permissions
function get_others($wg,&$othersflg=0)
{
$menu = app::get('desktop')->model('menus');
$aData = array();
$arr_per = $menu->getList('*',array('menu_type'=>'permission','disabled'=>'false','display'=>'true'));
#print_r($arr_per);exit;
foreach((array)$arr_per as $key => $val)
{
$arr_menu = $menu->getList('menu_id',array('menu_type' => 'menu','permission' => $val['permission']));
$__arr_menu = $menu->getList('menu_id',array('menu_type' => 'adminpanel','permission' => $val['permission']));
if($arr_menu || $__arr_menu)
{
continue;
}
else
{
if(in_array($val['permission'],(array)$wg))
{
$val['checked'] = 1;
$othersflg = 1;
}
else
{
$val['checked'] = 0;
}
$aData[] = $val;
}
}
return $aData;
}
public function get_roles($owner_permissions = array())
{
$menuModel = $this->app->model('menus');
// 工作组权限
$f_permissions = array();
$permissions = $menuModel->getList('*',array('menu_type' => 'permission'));
foreach ($permissions as $key => $value) {
$value['checked'] = in_array($value['permission'],$owner_permissions) ? 1 : 0;
$f_permissions[$value['permission']] = $value;
}
$wg_permissions = array();
$menus = $menuModel->getList('*',array('menu_type' => 'menu'));
foreach ($menus as $key => $value) {
if ($f_permissions[$value['permission']]) {
$wg_permissions[$value['workground']][$value['permission']] = $f_permissions[$value['permission']];
$wg_permissions[$value['workground']][$value['permission']]['role_workground'] = $value['workground'];
unset($f_permissions[$value['permission']]);
}
}
$workgrounds_permissions = array();
$workgrounds = $menuModel->getList('*',array('menu_type'=>'workground','disabled'=>'false','display'=>'true'));
foreach ($workgrounds as $key => $value) {
$value['permissions'] = $wg_permissions[$value['workground']];
$workgrounds_permissions[] = $value;
}
// 挂件权限
$widgets = $menuModel->getList('*',array('menu_type'=>'widgets'));
$widgets_permissions = array();
foreach($widgets as $key=>$value){
$value['checked'] = in_array($value['addon'],$owner_permissions) ? 1 : 0;
$widgets_permissions[] = $value;
}
// 控制面板权限
$adminpanels = $menuModel->getList('*',array('menu_type' => 'adminpanel'));
$adminpanels_permissions = array();
foreach($adminpanels as $key=>$value){
if ($f_permissions[$value['permission']]) {
$adminpanels_permissions[$value['permission']] = $f_permissions[$value['permission']];
$adminpanels_permissions[$value['permission']]['checked'] = in_array($value['permission'],$owner_permissions) ? 1 : 0;
unset($f_permissions[$value['permission']]);
}
}
// 其他权限
$others_permissions = array();
foreach ($f_permissions as $key => $value) {
if ($value['disabled'] == 'false' && $value['display'] == 'true') {
$value['checked'] = in_array($value['permission'],$owner_permissions) ? 1 : 0;
$others_permissions[] = $value;
}
}
return array('widgets'=>$widgets_permissions,'workgrounds'=>$workgrounds_permissions,'adminpanels'=>$adminpanels_permissions,'others'=>$others_permissions);
}
/**
* syncPermissionQueue
* @return mixed 返回值
*/
public function syncPermissionQueue()
{
$oidc = app::get('ome')->getConf('pam.passport.oidc.enable');
if($oidc != 'true') {
return ;
}
$oidcInfo = app::get('ome')->getConf('pam.passport.oidc.info');
if(!$oidcInfo['syncpermission']) {
return ;
}
$oQueue = app::get('base')->model('queue');
$queueData = array(
'queue_title' => '同步权限',
'start_time' => time(),
'params' => array(
),
'worker' => 'desktop_roles.syncPermission',
);
$oQueue->save($queueData);
$oQueue->flush();
}
/**
* syncPermission
* @param mixed $cursor_id ID
* @param mixed $params 参数
* @param mixed $errormsg errormsg
* @return mixed 返回值
*/
public function syncPermission($cursor_id, $params, $errormsg)
{
$data = $this->get_roles();
$sdf = [];
if($data['widgets']) {
$sdf[] = ['menu_id'=>'widgets','menu_title'=>'挂件','permissions'=>$data['widgets']];
}
if($data['workgrounds']) {
$sdf[] = ['menu_id'=>'workgrounds','menu_title'=>'工作组','permissions'=>$data['workgrounds']];
}
if($data['adminpanels']) {
$sdf[] = ['menu_id'=>'adminpanels','menu_title'=>'控制面板','permissions'=>$data['adminpanels']];
}
$data['others'][] = ['menu_id'=>'customer_sensitive_info','menu_title'=>'客户敏感信息','permission'=>'customer_sensitive_info'];
$data['others'][] = ['menu_id'=>'purchase_price','menu_title'=>'采购价','permission'=>'purchase_price'];
$data['others'][] = ['menu_id'=>'cost_price','menu_title'=>'成本价','permission'=>'cost_price'];
$data['others'][] = ['menu_id'=>'sale_price','menu_title'=>'销售价','permission'=>'sale_price'];
if($data['others']) {
$sdf[] = ['menu_id'=>'others','menu_title'=>'其他','permissions'=>$data['others']];
}
$operationOrg = app::get('ome')->model('operation_organization')->getList('org_id,name',['status'=>'1']);
if($operationOrg) {
$org = [];
foreach ($operationOrg as $v) {
$org[] = ['menu_id'=>'operation_organization-'.$v['org_id'],'menu_title'=>$v['name'],'permission'=>$v['org_id']];
}
$sdf[] = ['menu_id'=>'operation_organization','menu_title'=>'运营组织','permissions'=>$org];
}
$branch = app::get('ome')->model('branch')->getList('branch_id,name',['b_type'=>'1']);
if($branch) {
$b = [];
foreach ($branch as $v) {
$b[] = ['menu_id'=>'branch-'.$v['branch_id'],'menu_title'=>$v['name'],'permission'=>$v['branch_id']];
}
$sdf[] = ['menu_id'=>'branch','menu_title'=>'授权仓库','permissions'=>$b];
}
kernel::single('erpapi_router_request')->set('account','account')->user_syncPermission($sdf);
return false;
}
}