系统开发中的权限控制
简单点说就是运用运算实现,用“|”或 来实现权限添加,用“^”异或 实现权限删除,用“&”与 实现权限严重,如果为真则有权限<?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]