二进制交叉权限微型php类分享

 更新时间:2014年02月07日 09:21:59   作者:  
这篇文章主要介绍了二进制交叉权限微型php类,需要的朋友可以参考下

靓点:
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命令行写shell实例详解

    php命令行写shell实例详解

    这篇文章通过实例给大家介绍了php命令行写shell的方法,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-07-07
  • 关于PHP隐藏入口文件问题

    关于PHP隐藏入口文件问题

    这篇文章主要介绍了关于PHP隐藏入口文件问题,大概分为两个步骤,每一步给大家介绍的都非常详细,需要的朋友参考下吧
    2018-03-03
  • ThinkPHP验证码使用简明教程

    ThinkPHP验证码使用简明教程

    验证码功能主要是为了防止网站登录功能被刷,但是根据现在市面上常见的验证码功能,很容易被绕过,所以如果想让网站足够安全的话,最好再研究深入一些
    2014-03-03
  • PHP正在进行时-变量详解及字符串动态插入变量

    PHP正在进行时-变量详解及字符串动态插入变量

    这篇文章主要介绍了PHP正在进行时-变量详解及字符串动态插入变量的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-12-12
  • PHP将amr音频文件转换为mp3格式的操作细节

    PHP将amr音频文件转换为mp3格式的操作细节

    本文以centos服务器安装ffmpeg为例,给大家详细介绍PHP将amr音频文件转换为mp3格式的操作细节,感兴趣的朋友跟随小编一起看看吧
    2021-07-07
  • ThinkPHP 3使用OSS的方法

    ThinkPHP 3使用OSS的方法

    这篇文章主要介绍了ThinkPHP 3使用OSS的方法,非常不错,具有一定的参考借鉴借鉴,需要的朋友可以参考下
    2018-07-07
  • laravel框架中控制器的创建和使用方法分析

    laravel框架中控制器的创建和使用方法分析

    这篇文章主要介绍了laravel框架中控制器的创建和使用方法,结合实例形式详细分析了laravel框架控制器的原理、创建、使用方法及相关注意事项,需要的朋友可以参考下
    2019-11-11
  • PHP实现文件上传操作和封装

    PHP实现文件上传操作和封装

    这篇文章主要为大家详细介绍了PHP实现文件上传操作和封装,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Discuz论坛标题和底部去掉版权信息实例讲解

    Discuz论坛标题和底部去掉版权信息实例讲解

    这篇文章主要介绍了Discuz论坛标题和底部去掉版权信息实例讲解,有正好遇到这个问题但是不知道修改哪个文件的同学可以跟着操作下,可以节省很多不必要的时间
    2021-03-03
  • 详解thinkphp5+swoole实现异步邮件群发(SMTP方式)

    详解thinkphp5+swoole实现异步邮件群发(SMTP方式)

    这篇文章主要介绍了详解thinkphp5+swoole实现异步邮件群发(SMTP方式),具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10

最新评论