二进制交叉权限微型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 fsockopen写的HTTP下载的类
Feb 22 PHP
PHP写入WRITE编码为UTF8的文件的实现代码
Jul 07 PHP
PHP 创建标签云函数代码
May 26 PHP
php设计模式之单例模式使用示例
Jan 20 PHP
ThinkPHP CURD方法之limit方法详解
Jun 18 PHP
PHP延迟静态绑定示例分享
Jun 22 PHP
php支付宝在线支付接口开发教程
Sep 19 PHP
phpstudy默认不支持64位php的解决方法
Feb 20 PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 PHP
laravel ORM 只开启created_at的几种方法总结
Jan 29 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
Dec 13 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
Feb 11 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从数组中随机抽取一些元素的代码
2012/11/05 PHP
谈谈关于php的优点与缺点
2013/04/11 PHP
探讨:parse url解析URL,返回其组成部分
2013/06/14 PHP
教你如何快捷的使用cmd访问mysql小技巧
2014/05/26 PHP
PHP的伪随机数与真随机数详解
2015/05/27 PHP
php查询操作实现投票功能
2016/05/09 PHP
thinkPHP5.0框架自动加载机制分析
2017/03/18 PHP
php语言注释,单行注释和多行注释
2018/01/21 PHP
javascript在一段文字中的光标处插入其他文字
2007/08/26 Javascript
vs2003 js文件编码问题的解决方法
2010/03/20 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
jQuery实现鼠标划过添加和删除class的方法
2015/06/26 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
Actionscript与javascript交互实例程序(修改)
2016/09/22 Javascript
React如何将组件渲染到指定DOM节点详解
2017/09/08 Javascript
nodejs 图片预览和上传的示例代码
2017/09/30 NodeJs
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
vue树形结构获取键值的方法示例
2018/06/21 Javascript
python使用fcntl模块实现程序加锁功能示例
2017/06/23 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
python3实现猜数字游戏
2020/12/07 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
浅析python函数式编程
2020/09/26 Python
详解python的xlwings库读写excel操作总结
2021/02/26 Python
MADE荷兰:提供原创设计师家具
2018/04/03 全球购物
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
应届生服装设计自我评价
2013/09/20 职场文书
师范生实习个人的自我评价
2013/09/28 职场文书
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
创先争优演讲稿
2014/09/15 职场文书
法律专业大学生职业生涯规划书:向目标一步步迈进
2014/09/22 职场文书
Vue3中的Refs和Ref详情
2021/11/11 Vue.js
nginx日志格式分析和修改
2022/04/28 Servers