[php]代码库
<?php
/**
* level
* 多权限分配类
* @author 高阳 yunnysunny@sohu.com qq243853184
* @version 1.2
* @copyright 任何人都可以使用本类的全部和部分代码,但是要保留以上信息
*/
class Level {
private $mLevelNums;//当前角色个数
public $NONE=-1;//没有权限
public $TRAINING=14;//培训青年老师
public $ADMIN= 13;//管理员
public $BOSSHEAD= 12;//大赛负责人
public $GROUPHEAD= 11;//命题评审组长
public $EDITOR= 10;//编辑
public $SERVICER= 9;//就业服务人员
public $PROTEACHER= 8;//命题老师
public $WILLPROTEACHER= 7;//准命题老师
public $EXPERT= 6;//评审专家
public $ADVISER= 5;//指导老师
public $SCHOOLHEAD= 4;//校方负责人
public $SOFTTEAMER= 3;//软件选手
public $LANTEAMER= 2;//外语选手
public $CAMP= 1;//营员
public $USER= 0;//普通用户
public function __construct(){
$obj=& get_instance();
$this->mLevelNums=$obj->config->item('level_nums');//当前角色个数,在config.php中配置$config['level_nums'] = 15;
}
/*函数名:CheckLevel()
//参数:$levelString--------数据库中权限十进制
//作用:检测权限
//返回值:1.执行成功返回权限数组
// 2.执行不成功,返回0
*/
public function GetLevel($level){
$levelString=decbin($level);//十进制转化二进制
$levelArray=str_split($levelString);
$len=count($levelArray);
if($len<$this->mLevelNums){
$head=array();
for($i=0;$i<$this->mLevelNums-$len;$i++){
$head[$i]=0;
}
} else {
$head=array();
}
$levelArray=array_merge($head,$levelArray);
$j=0;
//echo $this->mLevelNums;
for($i=$this->mLevelNums-1;$i>=0;$i--){
if($levelArray[$i]==1){//拥有$i号权限
$returnArray[$j]=$this->mLevelNums-$i-1;
$j++;
}else{//不存在$i号权限
continue;
}
}
if($j==1) return $returnArray[0];
return ($j>0)? $returnArray : -1;
}
/*
函数名:SetSingleLevel()
参数:$singleLevel---------单个权限值,取值为0~$mLevelNums
作用:设置一个权限,可用在初始化新用户时使用
返回值:返回权限二进制
*/
public function SetSingleLevel($singleLevel){
$level="";
for($i=0;$i<$this->mLevelNums;$i++){
if($i!=$singleLevel){//数字前移
$level="0".$level;
}else{
$level="1".$level;
}
}
return $level;
}
/*
函数名:SetLevel()
参数:$levelData---------取单个值权限为0~$mLevelNums-1
作用:设置单个或多个权限限值,可用在初始化新用户或给用户添加新的权限
返回值:返回权限十进制
*/
public function SetLevel($levelData){
if(!is_array($levelData)){//单个值
//$levelData=decbin($levelData);
return bindec($this->SetSingleLevel($levelData));//将二进制转化为十进制
}else{//数组
$level="0";
foreach($levelData as $data){
//$data=decbin($data);
$level=$level|$this->SetSingleLevel($data);
}
return bindec($level);
}
}
public function GetSingleLevelString($singleString){
switch ($singleString){
case 13:
return '管理员';
break;
case 12:
return '大赛负责人';
break;
case 11:
return '命题评审组长';
break;
case 10:
return '编辑';
break;
case 9:
return '就业服务人员';
break;
case 8:
return '命题老师';
break;
case 7:
return '准命题老师';
break;
case 6:
return '指导老师';
break;
case 5:
return '评审专家';
break;
case 4:
return '校方负责人';
break;
case 3:
return '软件选手';
break;
case 2:
return '外语选手';
break;
case 1:
return '营员';
break;
case 0:
return '普通用户';
break;
default:
return '获取权限错误';
}
}
/**
函数名:GetLevelAsString
参数:$level-------------数据库中权限十进制
返回值:权限的字符串说明
*/
public function GetLevelAsString($level){
//$levelString=decbin($level);
$result=$this->GetLevel($level);
$returnString='';
if($result==-1){
$returnString='无任何权限';
}else{
if(!is_array($result)){
$returnString=$this->GetSingleLevelString($result);
}else{
foreach ($result as $single){
$returnString=$this->GetSingleLevelString($single)."|".$returnString;
}
}
}
return $returnString;
}
/*
函数名: DelLevel
参数:$levelNum------------取数值(0~$mLevelNums-1)
作用:返回权限的反向数字0010---1101
返回值:十进制数
*/
public function ContraryLevel($levelNum){
for($i=0;$i<$this->mLevelNums;$i++){
$level="";
if($i==$levelNum){
$level='0'.$level;
}else{
$level='1'.$level;
}
}
return bindec($level);
}
/*
函数名:CheckRole
参数:$level-----数据库中的十进制权限值
作用:根据权限值判断角色范围
返回值:
-1------非法权限
0------普通用户
1------学生
2------学校老师
3------大赛工作人员
4------管理员
5------权限未定义
*/
public function CheckRole($level) {
switch(true) {
case ($level<=0):
return -1;
break;
case ($level==1):
return 0;
break;
case ($level>1&&$level<16):
return 1;
break;
case ($level>=16&&$level<512):
return 2;
break;
case ($level>=512&&$level<8192):
return 3;
break;
case ($level>=8192&&$level<16384) :
return 4;
break;
default:
return 5;
}
}
public function HasRole($selfLevel,$checkLevel) {
return $selfLevel&$checkLevel;
}
}
?>