二进制交叉权限微型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中关于普通表单多文件上传的处理方法
Mar 25 PHP
PHP设计模式 注册表模式(多个类的注册)
Feb 05 PHP
解析php中array_merge与array+array的区别
Jun 21 PHP
ThinkPHP实现带验证码的文件上传功能实例
Nov 01 PHP
浅谈php优化需要注意的地方
Nov 27 PHP
php中mysql连接方式PDO使用详解
Feb 25 PHP
PHP超牛逼无限极分类生成树方法
May 11 PHP
PHP脚本自动识别验证码查询汽车违章
Dec 20 PHP
php实现查询功能(数据访问)
May 23 PHP
PHP机器学习库php-ml的简单测试和使用方法
Jul 14 PHP
PHP生成随机字符串实例代码(字母+数字)
Sep 11 PHP
laravel 实现向公共模板中传值 (view composer)
Oct 22 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 模拟登陆MSN并获得用户信息
2009/05/16 PHP
PHP采集相关教程之一 CURL函数库
2010/02/15 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
分享10段PHP常用代码
2015/11/11 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
php中foreach结合curl实现多线程的方法分析
2016/09/22 PHP
PHPMailer发送邮件
2016/12/28 PHP
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
js判断两个日期是否相等的方法
2013/09/10 Javascript
Extjs4中的分页应用结合前后台
2013/12/13 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
2014/05/27 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
2017/09/28 Javascript
关于TypeScript模块导入的那些事
2018/06/12 Javascript
微信小程序实现保存图片到相册功能
2018/11/30 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
Python+OpenCV+pyQt5录制双目摄像头视频的实例
2019/06/28 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
python global关键字的用法详解
2019/09/05 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
Python3常见函数range()用法详解
2019/12/30 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
html5如何在Canvas中实现自定义路径动画示例
2017/09/18 HTML / CSS
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
俄罗斯隐形眼镜和眼镜在线商店:Cronos
2020/06/02 全球购物
毕业生医学检验求职信
2013/10/16 职场文书
投标单位介绍信
2014/01/09 职场文书
我的求职计划书
2014/01/10 职场文书
缓刑人员的思想汇报
2014/01/11 职场文书
出纳员岗位责任制
2014/02/11 职场文书
船舶工程技术专业求职信
2014/08/07 职场文书
Oracle 触发器trigger使用案例
2022/02/24 Oracle