用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - php代码库

权限系统

2014-08-28 作者: 云代码会员举报

[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;
    }
 
}
?>


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...