二进制交叉权限微型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 相关文章推荐
jQuery+PHP实现的掷色子抽奖游戏实例
Jan 04 PHP
PHP技术开发微信公众平台
Jul 22 PHP
PHP+JS三级菜单联动菜单实现方法
Feb 24 PHP
微信红包随机生成算法php版
Jul 21 PHP
PHP 与 UTF-8 的最佳实践详细介绍
Jan 04 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
Aug 02 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
PHP如何根据文件头检测文件类型实例代码
Oct 14 PHP
实例讲解PHP验证邮箱是否合格
Jan 28 PHP
浅谈php://filter的妙用
Mar 05 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 PHP
php的RSA加密解密算法原理与用法分析
Jan 23 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 strtr() 函数使用说明
2008/11/21 PHP
php中去除所有js,html,css代码
2010/10/12 PHP
主流PHP框架的优缺点对比分析
2014/12/25 PHP
weiphp微信公众平台授权设置
2016/01/04 PHP
javascript入门基础之私有变量
2010/02/23 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
jQuery点击后一组图片左右滑动的实现代码
2012/08/16 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
基于jquery实现动态竖向柱状条特效
2016/02/12 Javascript
原生js封装的一些jquery方法(详解)
2016/09/20 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
js给table赋值的实例代码
2016/10/13 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
2018/10/18 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
深入解析ES6中的promise
2018/11/08 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
ajax jquery实现页面某一个div的刷新效果
2021/03/04 jQuery
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
详解Django缓存处理中Vary头部的使用
2015/07/24 Python
Python下载指定页面上图片的方法
2016/05/12 Python
python中logging库的使用总结
2017/10/18 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
python函数修饰符@的使用方法解析
2019/09/02 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
2020/04/15 Python
Django 解决开发自定义抛出异常的问题
2020/05/21 Python
关于CSS Tooltips(鼠标经过时显示)的效果
2013/04/10 HTML / CSS
JBL美国官方商店:扬声器、耳机等
2019/12/01 全球购物
潘多拉珠宝美国官方网站:Pandora US
2020/06/18 全球购物
微信营销策划方案
2014/02/24 职场文书
营销与策划实训报告
2014/11/05 职场文书
召开会议通知范文
2015/04/15 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书