二进制交叉权限微型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 相关文章推荐
Classes and Objects in PHP5-面向对象编程 [1]
Oct 09 PHP
解析PayPal支付接口的PHP开发方式
Nov 28 PHP
php+iframe实现隐藏无刷新上传文件
Feb 10 PHP
php中curl和file_get_content的区别
May 10 PHP
PHP中的一些常用函数收集
May 26 PHP
PHP ajax 异步执行不等待执行结果的处理方法
May 27 PHP
php简单备份与还原MySql的方法
May 09 PHP
PHP微信开发之模板消息回复
Jun 24 PHP
Laravel 5.3 学习笔记之 配置
Aug 28 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 PHP
PHP 使用位运算实现四则运算的代码
Mar 09 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一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
php的curl封装类用法实例
2014/11/07 PHP
ecshop后台编辑器替换成ueditor编辑器
2015/03/03 PHP
php计算指定目录下文件占用空间的方法
2015/03/13 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
2015/08/18 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
IE FF OPERA都可用的弹出层实现代码
2009/09/29 Javascript
简短几句 通俗解释javascript的闭包
2011/01/17 Javascript
js制作的鼠标悬浮时产生的下拉框效果
2012/10/27 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
2014/01/26 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
JS+CSS实现滑动切换tab菜单效果
2015/08/25 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
分享一道关于闭包、bind和this的面试题
2017/02/20 Javascript
Bootstrap Table从零开始
2017/06/30 Javascript
通俗解释JavaScript正则表达式快速记忆
2017/08/23 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
JavaScript动态添加数据到表单并提交的几种方式
2019/06/26 Javascript
JS实现进度条动态加载特效
2020/03/25 Javascript
Vue 禁用浏览器的前进后退操作
2020/09/04 Javascript
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
在Python的Bottle框架中使用微信API的示例
2015/04/23 Python
python word转pdf代码实例
2019/08/16 Python
Pytorch mask_select 函数的用法详解
2020/02/18 Python
Python安装whl文件过程图解
2020/02/18 Python
Chantelle仙黛尔内衣美国官网:法国第一品牌内衣
2018/07/26 全球购物
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
2014/09/05 面试题
致400米运动员广播稿
2014/02/07 职场文书
分家协议书
2014/04/21 职场文书
世界读书日的活动方案
2014/08/20 职场文书
2015年宣传部部长竞选演讲稿
2014/11/28 职场文书
外出考察学习心得体会
2016/01/18 职场文书
mybatis 获取无数据的字段不显示的问题
2021/07/15 Java/Android