二进制交叉权限微型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程序中的常见漏洞进行攻击
Oct 09 PHP
透析PHP的配置文件php.ini
Oct 09 PHP
php实现水仙花数示例分享
Apr 03 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
Jul 28 PHP
php批量添加数据与批量更新数据的实现方法
Dec 16 PHP
PHP中foreach()用法汇总
Jul 02 PHP
实例讲解yii2.0在php命令行中运行的步骤
Dec 01 PHP
变量在 PHP7 内部的实现(二)
Dec 21 PHP
详解PHP处理密码的几种方式
Nov 30 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
Aug 31 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
php输出文字乱码的解决方法
Oct 04 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
多文件上载系统完整版
2006/10/09 PHP
杏林同学录(四)
2006/10/09 PHP
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
理解php Hash函数,增强密码安全
2011/02/25 PHP
解决在laravel中auth建立时候遇到的问题
2019/10/15 PHP
php 中的信号处理操作实例详解
2020/03/04 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
js 未结束的字符串常量错误解决方法
2010/06/13 Javascript
Jquery实现简单的动画效果代码
2012/03/18 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
2015/09/02 Javascript
javascript实现添加附件功能的方法
2015/11/18 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
jQuery实现漂亮实用的商品图片tips提示框效果(无图片箭头+阴影)
2016/04/16 Javascript
node操作mysql数据库实例详解
2017/03/17 Javascript
使用Vue动态生成form表单的实例代码
2018/04/26 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
[39:00]Optic vs VP 2018国际邀请赛淘汰赛BO3 第三场 8.24
2018/08/25 DOTA
Python中3种内建数据结构:列表、元组和字典
2014/11/30 Python
Python走楼梯问题解决方法示例
2018/07/25 Python
Python中的引用知识点总结
2019/05/20 Python
Python空间数据处理之GDAL读写遥感图像
2019/08/01 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
2019/08/27 Python
解决python 文本过滤和清理问题
2019/08/28 Python
python计算二维矩形IOU实例
2020/01/18 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
python多线程semaphore实现线程数控制的示例
2020/08/10 Python
生产车间班组长岗位职责
2014/01/06 职场文书
动漫专业高职生职业生涯规划书
2014/02/15 职场文书
镇党政领导班子民主生活会思想汇报
2014/10/11 职场文书
教师党员整改措施
2014/10/24 职场文书
社区服务活动报告
2015/02/05 职场文书
奖金申请报告模板
2015/05/15 职场文书
2015年车间主任工作总结
2015/05/21 职场文书
我的收音机情缘
2022/04/05 无线电