二进制交叉权限微型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 相关文章推荐
Mysql和网页显示乱码解决方法集锦
Mar 27 PHP
php将gd生成的图片缓存到memcache的小例子
Jun 05 PHP
php操作mysql数据库的基本类代码
Feb 25 PHP
php获取网页中图片、DIV内容的简单方法
Jun 19 PHP
C#静态方法与非静态方法实例分析
Sep 22 PHP
PHP向socket服务器收发数据的方法
Jan 24 PHP
Laravel 的数据库迁移的方法
Jul 31 PHP
总结PHP内存释放以及垃圾回收
Mar 29 PHP
php 可变函数使用小结
Jun 12 PHP
php微信开发之音乐回复功能
Jun 14 PHP
PDO::errorInfo讲解
Jan 28 PHP
Laravel5.1 框架表单验证操作实例详解
Jan 07 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
Windows7下PHP开发环境安装配置图文方法
2010/05/20 PHP
php中explode函数用法分析
2014/11/15 PHP
PHP+MySQL修改记录的方法
2015/01/21 PHP
php实现简单的MVC框架实例
2015/09/23 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
xml和web特殊字符
2009/04/28 Javascript
js获取网页高度(详细整理)
2012/12/28 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
2013/11/29 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
实例详解AngularJS实现无限级联动菜单
2016/01/15 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
微信小程序 动画的简单实例
2017/10/12 Javascript
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
Jquery的autocomplete插件用法及参数讲解
2019/03/12 jQuery
jQuery实现判断滚动条滚动到document底部的方法分析
2019/08/27 jQuery
vue+element实现动态加载表单
2020/12/13 Vue.js
[05:23]DOTA2-DPC中国联赛2月1日Recap集锦
2021/03/11 DOTA
Python读取键盘输入的2种方法
2015/06/16 Python
浅谈Python浅拷贝、深拷贝及引用机制
2016/12/15 Python
windows下python安装小白入门教程
2018/09/18 Python
python解析yaml文件过程详解
2019/08/30 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
2020/02/23 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
蛋白质世界:Protein World
2017/11/23 全球购物
包装类的功能、种类、常用方法
2012/01/27 面试题
《燕子专列》教学反思
2014/02/21 职场文书
王老吉广告词
2014/03/20 职场文书
给老婆的检讨书
2015/01/27 职场文书
介绍信格式
2015/01/30 职场文书
法制工作总结2015
2015/07/23 职场文书