当前位置:首页 > PHP教程 > php类库 > 列表

二进制交叉权限微型php类分享

发布:smiling 来源: PHP粉丝网  添加日期:2020-09-07 16:49:48 浏览: 评论:0 

这篇文章主要介绍了二进制交叉权限微型php类,需要的朋友可以参考下

靓点:

1、多对多交叉场景分配;

2、php新特性-闭包使用、批处理函数array_walk/array_flip使用;

3、位运算&使用案例;

使用场景:

1、常见增删改查(2的N次方值入库);

2、认证、第三方账号绑定、多分类选择;

代码如下:

  1. <?php 
  2.  
  3. class s_allow{ 
  4.  
  5. //声明使用场景,任务清单 
  6. public $scene,$case_list=array(); 
  7.  
  8. //声明指定用户角色、允许值、允许清单 
  9. public $allow_value=0,$allow_list=array(); 
  10.  
  11.  
  12. //初始化场景、角色 
  13. function __construct($scene,$allow_value=0){ 
  14. $this->scene=$scene
  15. $this->case_list=$this->case_list(true); 
  16.  
  17. if ($allow_value) { 
  18. $this->allow_value=$allow_value
  19. $this->allow_list=$this->allow_list($allow_value,true); 
  20.  
  21.  
  22. //取得全部任务清单 
  23. function case_list($mode=false){ 
  24. $case_list=config($this->scene,'allow'); 
  25. return $mode ? $case_list : array_keys($case_list); 
  26.  
  27.  
  28. //取得用户任务清单 
  29. function allow_list($allow_value=0,$mode=false){ 
  30. $buffer=array(); 
  31. foreach ($this->case_list as $key=>$value) { 
  32. if ($allow_value & pow(2,$key-1)) { 
  33. $buffer[$key]=$value
  34. return $mode ? $buffer : array_keys($buffer); 
  35.  
  36.  
  37. //计算允许值 
  38. function allow_value($allow_list=null){ 
  39. if ($allow_list==null) $allow_list=$this->allow_list; 
  40. array_walk($allow_listfunction($value,$keyuse(&$allow_list){ 
  41. $allow_list[$key]=pow(2,$value-1); 
  42. }); 
  43. return array_sum($allow_list); 
  44.  
  45.  
  46. //判断是否允许 
  47. function is_allow($case){ 
  48. $case_list=array_flip($this->case_list); 
  49. return (bool)($this->allow_value & pow(2,$case_list[$case]-1)); 

代码如下:

  1. [access] 
  2. 1=add 
  3. 2=del 
  4. 3=read 
  5. 4=list 
  6. 5=mod 
  7. 6=detail 
  8. 7=pub 
  9. 8=collect 
  10. 9=like 
  11. 10=send 
  12.  
  13.  
  14. [cert] 
  15. 1=email 
  16. 2=tel 
  17. 3=qq 
  18. 4=identity_card 
  19. 5=real_name 
  20. 6=business_license 
  21.  
  22.  
  23. [bind] 
  24. 1=qq 
  25. 2=weibo 
  26. 3=taobao 
  27. 4=alipay 
  28. 5=renren 
  29. 6=weichat 
  30. 7=baidu 

Tags: php二进制交叉权限

分享到: