二进制交叉权限微型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 相关文章推荐
javascript 小型动画组件与实现代码
Jun 02 PHP
ubuntu 编译安装php 5.3.3+memcache的方法
Aug 05 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
Apr 02 PHP
PIGCMS 如何关闭聊天机器人
Feb 12 PHP
PHP编写RESTful接口的方法
Feb 21 PHP
thinkphp修改配置进入默认首页的方法
Feb 07 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 PHP
PHP array_reduce()函数的应用解析
Oct 28 PHP
PHP文件类型检查及fileinfo模块安装使用详解
May 09 PHP
php使用curl模拟多线程实现批处理功能示例
Jul 25 PHP
PHP使用phpunit进行单元测试示例
Sep 23 PHP
PHP xpath提取网页数据内容代码解析
Jul 16 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 开发环境配置(测试开发环境)
2010/04/28 PHP
php 启动时报错的简单解决方法
2014/01/27 PHP
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
php设置静态内容缓存时间的方法
2014/12/01 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
用JQuery模仿淘宝的图片放大镜显示效果
2011/09/15 Javascript
JS去除iframe滚动条的方法
2015/04/01 Javascript
jQuery控制DIV层实现由大到小,由远及近动画变化效果
2015/10/09 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)
2016/12/02 Javascript
Vue Ajax跨域请求实例详解
2017/06/20 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
20多个小事例带你重温ES10新特性(小结)
2019/09/29 Javascript
Javascript Worker子线程代码实例
2020/02/20 Javascript
js实现无限层级树形数据结构(创新算法)
2020/02/27 Javascript
JS内置对象和Math对象知识点详解
2020/04/03 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
2020/10/26 Javascript
python抓取某汽车网数据解析html存入excel示例
2013/12/04 Python
Python程序设计入门(2)变量类型简介
2014/06/16 Python
Python脚本实现Web漏洞扫描工具
2016/10/25 Python
Python使用QQ邮箱发送Email的方法实例
2017/02/09 Python
解决Python的str强转int时遇到的问题
2018/04/09 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
浅谈pytorch和Numpy的区别以及相互转换方法
2018/07/26 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
2020/02/27 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
HTML5中Localstorage的使用教程
2015/07/09 HTML / CSS
《浅水洼里的小鱼》听课反思
2014/02/28 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
房屋出售授权委托书
2014/10/12 职场文书
教师培训简讯
2015/07/20 职场文书