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


Posted in PHP onFebruary 07, 2014

靓点:
1、多对多交叉场景分配;
2、php新特性-闭包使用、批处理函数array_walk/array_flip使用;
3、位运算&使用案例;

使用场景:
1、常见增删改查(2的N次方值入库);
2、认证、第三方账号绑定、多分类选择;

<?php
class s_allow{
//声明使用场景,任务清单
public $scene,$case_list=array();
//声明指定用户角色、允许值、允许清单
public $allow_value=0,$allow_list=array();

//初始化场景、角色
function __construct($scene,$allow_value=0){
$this->scene=$scene;
$this->case_list=$this->case_list(true);
if ($allow_value) {
$this->allow_value=$allow_value;
$this->allow_list=$this->allow_list($allow_value,true);
}
}

//取得全部任务清单
function case_list($mode=false){
$case_list=config($this->scene,'allow');
return $mode ? $case_list : array_keys($case_list);
}

//取得用户任务清单
function allow_list($allow_value=0,$mode=false){
$buffer=array();
foreach ($this->case_list as $key=>$value) {
if ($allow_value & pow(2,$key-1)) {
$buffer[$key]=$value;
}
}
return $mode ? $buffer : array_keys($buffer);
}

//计算允许值
function allow_value($allow_list=null){
if ($allow_list==null) $allow_list=$this->allow_list;
array_walk($allow_list, function($value,$key) use(&$allow_list){
$allow_list[$key]=pow(2,$value-1);
});
return array_sum($allow_list);
}

//判断是否允许
function is_allow($case){
$case_list=array_flip($this->case_list);
return (bool)($this->allow_value & pow(2,$case_list[$case]-1));
}
}
[access]
1=add
2=del
3=read
4=list
5=mod
6=detail
7=pub
8=collect
9=like
10=send

[cert]
1=email
2=tel
3=qq
4=identity_card
5=real_name
6=business_license

[bind]
1=qq
2=weibo
3=taobao
4=alipay
5=renren
6=weichat
7=baidu
PHP 相关文章推荐
php 随机记录mysql rand()造成CPU 100%的解决办法
May 18 PHP
UCenter中的一个可逆加密函数authcode函数代码
Jul 20 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
Feb 14 PHP
ThinkPHP实现一键清除缓存方法
Jun 26 PHP
php使用date和strtotime函数输出指定日期的方法
Nov 14 PHP
php短网址和数字之间相互转换的方法
Mar 13 PHP
PHP生成指定随机字符串的简单实现方法
Apr 01 PHP
PHP实现通过URL提取根域名
Mar 31 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
Apr 26 PHP
php mysql获取表字段名称和字段信息的三种方法
Nov 13 PHP
PDO::getAttribute讲解
Jan 28 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 PHP
php stripslashes和addslashes的区别
Feb 03 #PHP
php获取网页标题和内容函数(不包含html标签)
Feb 03 #PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
Feb 02 #PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
Jan 31 #PHP
分享一个超好用的php header下载函数
Jan 31 #PHP
preg_match_all使用心得分享
Jan 31 #PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
Jan 31 #PHP
You might like
php 正确解码javascript中通过escape编码后的字符
2010/01/28 PHP
PHP网站建设的流程与步骤分享
2015/09/25 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
php使用环形链表解决约瑟夫问题完整示例
2018/08/07 PHP
PHP检查端口是否可以被绑定的方法示例
2018/08/09 PHP
PHP实现SMTP邮件的发送实例
2018/09/27 PHP
JS的递增/递减运算符和带操作的赋值运算符的等价式
2007/12/08 Javascript
Jquery AutoComplete自动完成 的使用方法实例
2010/03/19 Javascript
jQuery源码分析-03构造jQuery对象-源码结构和核心函数
2011/11/14 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
AngularJS动态生成div的ID源码解析
2016/08/29 Javascript
js实现表单提交后不重新刷新当前页面
2016/11/30 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
nodejs aes 加解密实例
2018/10/10 NodeJs
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
WEB前端性能优化的7大手段详解
2020/02/04 Javascript
javascript实现移动端上传图片功能
2020/08/18 Javascript
使用webpack5从0到1搭建一个react项目的实现步骤
2020/12/16 Javascript
Python使用Flask框架获取当前查询参数的方法
2015/03/21 Python
初步探究Python程序的执行原理
2015/04/11 Python
python SSH模块登录,远程机执行shell命令实例解析
2018/01/12 Python
Python构建图像分类识别器的方法
2019/01/12 Python
python标记语句块使用方法总结
2019/08/05 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
python json 递归打印所有json子节点信息的例子
2020/02/27 Python
在Keras中利用np.random.shuffle()打乱数据集实例
2020/06/15 Python
html5嵌入内容_动力节点Java学院整理
2017/07/07 HTML / CSS
英国最红的高街时尚品牌:Topshop
2016/08/05 全球购物
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
中专毕业生自我鉴定
2014/02/02 职场文书
开学典礼演讲稿
2014/05/23 职场文书
三八节标语
2014/06/27 职场文书
vue+iview实现手机号分段输入框
2022/03/25 Vue.js