mengdejun 发表于 2013-2-7 01:44:59

系统开发中的权限控制

简单点说就是运用运算实现,用“|”或 来实现权限添加,用“^”异或 实现权限删除,用“&”与 实现权限严重,如果为真则有权限
<?phpdefine("PUBLIC_ARTICLE", 1); //发行文章 define("CREATE_ARTICLE", 2); //添加文章 define("MODIFY_ARTICLE", 4); //修改文章 define("DELETE_ARTICLE", 8); //删除文章 define("SHARCH_ARTICLE", 16); //搜索文章 define("CREATE_COMMENT", 32); //添加文章评论 define("DELETE_COMMENT", 64); //删除文章评论 //所有的权限 $final_allow = PUBLIC_ARTICLE | CREATE_ARTICLE | MODIFY_ARTICLE    | DELETE_ARTICLE | SHARCH_ARTICLE | CREATE_COMMENT | DELETE_COMMENT;    //增加权限使用 | echo"管理者拥有的全部权限:" .$final_allow. "<br>";       $no_shearch_allow = $final_allow ^ SHARCH_ARTICLE;    //删除权限使用 ^ 或 & ~echo"仅无法搜索文章的权限:" .decbin($no_shearch_allow). "<br>";       //编辑人员独有的权限 $editor_allow = PUBLIC_ARTICLE | MODIFY_ARTICLE | DELETE_ARTICLE;    $no_editor_allow = $final_allow & ~$editor_allow;    echo"非编辑人员所有的权限:" .decbin($no_editor_allow). "<br>";   //判断权限使用 & ( 是, 返回非0; 不是, 返回0)            define("LIS", 1);define("ADD", 2);define("DEL", 4);define("UPD", 8);define("REA", 16);$all_full = LIS | ADD | DEL | UPD | REA;$all_sub = LIS | ADD | DEL;if($all_sub&REA) echo "a";?> 
 
1.<?php    2./** 3.* 权限控制类 4.*/   5.   6.class include_purview    7.{    8.    /** 9.      * 类的唯一实例 10.      */   11.    private static $instance;    12.      13.    /** 14.      * 权限常量 15.      */   16.    const SELECT = 0x1; //查询    17.    const CREATE = 0x2; //添加    18.    const EDIT    = 0x4; //修改    19.    const DELETE = 0x8; //删除    20.      21.    /** 22.      * 角色 23.      */   24.    private $annoy = ''; //匿名用户    25.    private $user   = ''; //注册用户    26.    private $admin = ''; //管理用户    27.    private $usertype = 'annoy';    28.    private $hashtable = array(1=>'查询',2=>'添加',4=>'修改',8=>'删除');    29.      30.    /** 31.      * 32.      */   33.    public function __set($name,$value)    34.   {    35.      if ($name == 'usertype')    36.         {    37.            if ($value != '')    38.             {    39.                $this->usertype = $value;    40.             }    41.         }    42.   }    43.      44.    /** 45.      * 构造函数 给角色赋予权限 46.      */   47.    private function __construct()    48.   {    49.      $this->annoy = self::SELECT;    50.      $this->user = self::SELECT | self::CREATE;    51.      $this->admin = self::SELECT | self::CREATE | self::EDIT | self::DELETE;    52.   }    53.      54.    /** 55.      * 获取类的唯一实例 56.      */   57.    public static function getInstance()    58.   {    59.      if (self::$instance === null){    60.             self::$instance = new include_purview();    61.         }    62.      return self::$instance;    63.   }    64.      65.    /** 66.      * 检查权限 67.      * 68.      * @param $usertype 角色 69.      * @param $purview 权限 70.      */   71.    public function check($purview)    72.   {    73.      if ($this->{$this->usertype} & $purview)    74.         {    75.            return true;    76.         }    77.      return false;    78.   }    79.      80.    /** 81.      * 给角色加权限 82.      */   83.    public function addPur($purview)    84.   {    85.      $this->{$this->usertype} |= $purview;    86.   }    87.      88.    /** 89.      * 给角色减权限 90.      */   91.    public function delPur($purview)    92.   {    93.      $this->{$this->usertype} ^= $purview;    94.   }    95.      96.    /** 97.      * 返回角色拥有的权限 98.      */   99.    public function getPur()    100.   {    101.      $arr = array();    102.      foreach ($this->hashtable as $k => $v)    103.         {    104.            if ($k & $this->{$this->usertype})    105.             {    106.                $arr[] = $v;    107.             }    108.         }    109.      return $arr;    110.   }    111.}   调用示例PHP代码1./** 2.* 示例 3.*/   4.//在session中读用户组    5.@session_start();    6.$_SESSION['role'] = 'user';    7.   8.//获取权限类的实例    9.$pruview = include_purview::getInstance();    10.//设置角色    11.$pruview->usertype = $_SESSION['role'];    12.//获取该角色拥有的权限    13.$arr = $pruview->getpur();    14.echo '该用户的权限有:'.join(',',$arr)."\n";    15.//判断执行的操作是否有权限    16.if (true === $pruview->check(include_purview::CREATE ))    17.{    18.   create(); //要执行的操作    19.}    20.else    21.{    22.    exit('您没有权限!');    23.}    24.//去掉用户的添加权限    25.$pruview->delPur(include_purview::CREATE );    26.$arr = $pruview->getpur();    27.echo '该用户的权限有:'.join(',',$arr)."\n";    28.//执行添加操作    29.if (true === $pruview->check(include_purview::CREATE ))    30.{    31.   create(); //要执行的操作    32.}    33.else    34.{    35.    echo '您没有权限!'."\n";    36.}    37.//加上用户的添加权限    38.$pruview->addPur(include_purview::CREATE );    39.$arr = $pruview->getpur();    40.echo '该用户的权限有:'.join(',',$arr)."\n";    41.//执行添加操作    42.if (true === $pruview->check(include_purview::CREATE ))    43.{    44.   create(); //要执行的操作    45.}    46.else    47.{    48.    exit('您没有权限!');    49.}    50.   51.//具体的操作    52.function create()    53.{    54.    echo '执行了添加操作'."\n";    55.}    
http://s.zbjimg.com/p/promoter/img/pic/2/300%C3%97250.gif 
页: [1]
查看完整版本: 系统开发中的权限控制