<?php
namespace imcat;
// usrPerm : 单独分离出来
class usrPerm{
static function simIdpw($id, $pw){
$arr = glbConfig::read('simpass','sy');
$msg = basLang::show('tools.rst_idpw_tip2');
return (in_array($id,$arr) || in_array($pw,$arr)) ? $msg : '';
}
//
static function issup(){
$sessid = self::getSessid();
$sesstr = isset($_SESSION[$sessid]) ? $_SESSION[$sessid] : ''; ;
$prem = strpos($sesstr,'grade=supper'); //dump($prem);
return $prem;
}
// fix : '';end;full
// ??? usrPerm::run(array('pcheck,about','padd,about'));
//usrPerm::run('mkv','admin-groups');
static function run($key='mkv',$val='',$fix='end'){
global $_cbase;
if($key=='mkv' && empty($val)) $val = $_cbase['mkv']['mkv'];
$msg = self::check($key,$val);
if(empty($fix)){
return $msg;
}elseif(in_array($fix,array('end','full'))){
if($msg){
if($fix=='full'){
glbHtml::page();
glbHtml::page('body');
}
$msg = str_replace('; ',"; <br>\n",$msg);
$msg = "\n<p class='err'>NO Permission: <br>\n$msg</p>";
die(glbHtml::page('end',$msg));
}
}elseif(in_array($fix,array('js'))){
return $msg; /// ???
}else{
return $msg;
}
}
// re : str, ''
static function check($key,$val=''){
if($key=='mkv'){
$key = defined('RUN_ADMIN') ? 'mkva' : 'mkvu';
}
$user = usrBase::userObj();
if($key=='usess'){
$str = comSession::get(self::getSessid());
$re = strstr($str,$val) ? '' : "$key:$val";
return $re;
}elseif(self::issup()){
return ''; //超级管理员
//}elseif(is_array($key)){
//return self::pmArr($key);
}else{
return self::pmOne($key,$val);
}
}
// utype,login,model,grade,p*,usess,
// re: str, ''
static function pmStr($key){
$user = usrBase::userObj();
$re = '';
if(in_array($key,array('utype','uflag'))){
$key = str_replace(array('utype','uflag'),array('usertType','userFlag'),$key);
return $user->$key;
}elseif(in_array($key,array('model','grade'))){
return $user->uperm[$key];
}elseif(isset($user->uperm[$key])){
$pmstr = $user->uperm[$key];
if(!empty($user->uperm['impid'])){
$k2 = $user->uperm['impid'];
$grades = glbConfig::read('grade','dset');
if(isset($grades[$k2])){
$pmstr .= ','.$grades[$k2][$key];
}
}
return $pmstr;
}else{
return '';
}
}
// re : str, '', -
static function pmOne($key,$val){
if(empty($key) || empty($val)){
return '-';
}else{
$str = self::pmStr($key);
if(strpos(":,$str,",",$val,")){
return '';
}else{
return "$key:$val";
}
}
}
// re : str, ''
/*static function pmArr($arr){
$re = '';
foreach($arr as $v){
$a = explode(',',"$v,");
$rt = self::pmOne($a[0],$a[1]);
if(!empty($rt)){
$re .= (empty($re) ? '' : '; ')."$a[0]:$a[1]";
}
}
return $re;
}*/
// 从uperm['cfgs']中取得权限key(s)
static function pmCfgs($cfgs='',$re='_arr'){
$cfgs = is_object($cfgs) ? $cfgs->uperm['cfgs'] : (is_array($cfgs) ? $cfgs['cfgs'] : $cfgs);
$a = basElm::text2arr($cfgs);
if($re=='_arr'){
return $a;
}else{
return isset($a[$re]) ? $a[$re] : '';
}
}
// 取得Upload权限key(s)
static function pmUpload($uobj=''){
if(empty($uobj)){
$uobj = usrBase::userObj();
}
if(@$uobj->uperm['grade']=='supper'){
return array('upsize1'=>'(supper)','uptypes'=>'(supper)',);
}
$rcfg = self::pmCfgs($uobj->uperm['cfgs']);
$rcfg['uptypes'] = array();
$upex = empty($uobj->uperm['pextra']) ? array() : explode(',',$uobj->uperm['pextra']);
if(!empty($upex)){
$tcfg = glbConfig::read('filetype','sy');
foreach($upex as $k){
if(isset($tcfg[$k])){
$rcfg['uptypes'] = array_merge($rcfg['uptypes'],$tcfg[$k]);
}
}
}
if($rcfg['uptypes']){
$rcfg['uptypes'] = explode(',','.'.implode(',.',$rcfg['uptypes']));
}
if(empty($rcfg['upsize1'])) $rcfg['upsize1'] = 10; //KB
if(empty($rcfg['uptypes'])) $rcfg['uptypes'] = array('.gif', '.jpg'); //KB
return $rcfg;
}
// type : array('sip'=>$sipck,'sua'=>$ua,'sid'=>$enc)
static function getUniqueid($mode='Cook',$type='sip'){ //Unique
$re = comSession::guid('safil','Uniqueid',$mode);
return $re[$type];
}
// re : str,
static function getSessid(){
global $_cbase;
$tid = preg_replace("/[^\w]/", '', $_cbase['safe']['safil']);
return 'pmSessid_'.$tid;
}
}