二进制交叉权限微型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 相关文章推荐
将文件夹压缩成zip文件的php代码
Dec 14 PHP
解析yii数据库的增删查改
Jun 20 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
Jan 12 PHP
php导入excel文件到mysql数据库的方法
Jan 14 PHP
php打印一个边长为N的实心和空心菱型的方法
Mar 02 PHP
使用GD库生成带阴影文字的图片
Mar 27 PHP
关于PHP开发的9条建议
Jul 27 PHP
php抓取网站图片并保存的实现方法
Oct 29 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
May 05 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
Aug 06 PHP
php中pcntl_fork详解
Apr 01 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
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
CodeIgniter基本配置详细介绍
2013/11/12 PHP
php处理单文件、多文件上传代码分享
2016/08/24 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
2019/02/20 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
2019/10/25 PHP
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
教你如何使用node.js制作代理服务器
2014/11/26 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
JavaScript实现身份证验证代码
2016/02/17 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
第四章之BootStrap表单与图片
2016/04/25 Javascript
JS实现浏览器打印、打印预览示例
2017/02/28 Javascript
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
[01:01:13]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第三场
2018/04/06 DOTA
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
python实现自动发送报警监控邮件
2018/06/21 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
python matplotlib 画dataframe的时间序列图实例
2019/11/20 Python
html5给汉字加拼音加进度条的实现代码
2020/04/07 HTML / CSS
The Athlete’s Foot新西兰:新西兰最大的运动鞋零售商
2019/12/23 全球购物
数字天堂软件测试面试题
2012/12/23 面试题
创建省级文明单位实施方案
2014/02/27 职场文书
国际经济与贸易专业求职信
2014/07/10 职场文书
会计求职简历自我评价
2015/03/10 职场文书
大专护理专业自荐信
2015/03/25 职场文书
入党积极分子群众意见
2015/06/01 职场文书
赵氏孤儿观后感
2015/06/09 职场文书
女方家长婚礼致辞
2015/07/27 职场文书
七夕情人节问候语
2015/11/11 职场文书
深入讲解Vue中父子组件通信与事件触发
2022/03/22 Vue.js
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技
mysql 子查询的使用
2022/04/28 MySQL