二进制交叉权限微型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安全防范技巧分享
Nov 03 PHP
基于wordpress主题制作的具体实现步骤
May 10 PHP
PHP 异步执行方法,模拟多线程的应用分析
Jun 03 PHP
解析php中array_merge与array+array的区别
Jun 21 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
Apr 09 PHP
PHP+Mysql基于事务处理实现转账功能的方法
Jul 08 PHP
php链表用法实例分析
Jul 09 PHP
PHP串行化与反串行化实例分析
Dec 27 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
Apr 25 PHP
PHP使用redis消息队列发布微博的方法示例
Jun 22 PHP
thinkphp5框架扩展redis类方法示例
May 06 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 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求解三数之和问题详析
2020/11/09 PHP
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
利用js实现遮罩以及弹出可移动登录窗口
2013/07/08 Javascript
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
javascript下拉列表菜单的实现方法
2015/11/18 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
element-ui使用导航栏跳转路由的用法详解
2018/08/22 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
2019/03/27 Javascript
在vue+element ui框架里实现lodash的debounce防抖
2019/11/13 Javascript
Vue extend的基本用法(实例详解)
2019/12/09 Javascript
Python的re模块正则表达式操作
2016/05/25 Python
Python中struct模块对字节流/二进制流的操作教程
2017/01/21 Python
使用python编写udp协议的ping程序方法
2018/04/22 Python
为什么Python中没有&quot;a++&quot;这种写法
2018/11/27 Python
Python图像滤波处理操作示例【基于ImageFilter类】
2019/01/03 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
全面介绍python中很常用的单元测试框架unitest
2020/12/14 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
HTML5 audio标签使用js进行播放控制实例
2015/04/24 HTML / CSS
JavaScript获取当前url根目录(路径)
2014/02/19 面试题
成人毕业生自我鉴定
2013/10/18 职场文书
车祸赔偿收入证明
2014/01/09 职场文书
《雨点》教学反思
2014/02/12 职场文书
最常使用的求职信
2014/05/25 职场文书
银行竞聘报告范文
2014/11/06 职场文书
介绍信的格式
2015/01/30 职场文书
推广普通话的宣传语
2015/07/13 职场文书
奶茶店的创业计划书该怎么写?
2019/07/15 职场文书
详解MySQL 用户权限管理
2021/04/20 MySQL