二进制交叉权限微型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

(0)

相关推荐

  • 二进制交叉权限微型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=ar

  • Java_int、double型数组常用操作工具类(分享)

    学了数组之后,感觉有好多操作需要经常去写,很不方便,因此自己做了一个工具类,方便调用,方法可能不全,希望大家可以添加,让我使用也方便一点儿. public class ArrayUtils { //求数组的最大值(int) public static int getMax(int[] arr){ int max = arr[0]; for(int i = 0;i<arr.length;i++){ if(max<arr[i]){ max = arr[i]; } } return max; } /

  • php备份数据库类分享

    php备份数据库类分享 <?php /** * * @name php备份数据库 * @param string $DbHost 连接主机 * @param string $DbUser 用户名 * @param string $DbPwd 连接密码 * @param string $DbName 要备份的数据库 * @param string $saveFileName 要保存的文件名, 默认文件保存在当前文件夹中,以日期作区分 * @return Null * @example backup

  • Android如何判断手机是否有录音权限的工具类

    作用 判断手机是否有录音权限的工具类,兼容6.0以上以及以下android系统 测试环境 这篇文章是评论中的网友提出质疑后,经过重写修改与重写测试后编写的,我的调试环境是小米note3,Android7.1的系统. 记得在清单文件中配置对应的权限. 思路 检测是否有权限 -->有权限--执行相关操作 -->无权限-- 判断系统版本 --大于等于6.0 --动态申请权限 -->对申请结果的回调处理 --允许 --拒绝 代码 工具类CheckAudioPermission.java pack

  • 史上最全Java8日期时间工具类(分享)

    这是我总结的Java8日期工具类,应该是比较全面的,满足日常开发绝大部分需求,分享给大家,有错误之处,还望大神指教. /** * Java8日期时间工具类 * * @author JourWon * @date 2020/12/13 */ public class LocalDateUtils { /** * 显示年月日时分秒,例如 2015-08-11 09:51:53. */ public static final String DATETIME_PATTERN = "yyyy-MM-dd

  • C#条码生成类分享

    本文实例为大家分享了C#条码生成类的具体代码,供大家参考,具体内容如下 using System.Collections; using System.Text.RegularExpressions; namespace DotNet.Utilities { public class BarCodeToHTML { public static string get39(string s, int width, int height) { Hashtable ht = new Hashtable()

  • c#注册表操作类分享

    复制代码 代码如下: /// <summary>/// 注册表基项静态域/// /// 主要包括:/// 1.Registry.ClassesRoot 对应于HKEY_CLASSES_ROOT主键/// 2.Registry.CurrentUser 对应于HKEY_CURRENT_USER主键/// 3.Registry.LocalMachine 对应于 HKEY_LOCAL_MACHINE主键/// 4.Registry.User 对应于 HKEY_USER主键/// 5.Registry.

  • Android Zip解压缩工具类分享

    本文实例为大家分享了Android Zip解压缩工具类的具体代码,供大家参考,具体内容如下 package com.example.zip.commons.utils; import android.util.Log; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.ArrayList

  • React Native时间转换格式工具类分享

    本文实例为大家分享了React Native时间转换格式工具类,供大家参考,具体内容如下 class DateUtil{ /** * 例如:2017-06-28 10:48:46转成date类, * 可把- replace成/ * @param dateString * @return Date */ static parserDateString(dateString){ if(dateString){ let regEx = new RegExp("\\-","gi&qu

  • React Native验证码倒计时工具类分享

    本文实例为大家分享了React Native验证码倒计时工具类的具体代码,供大家参考,具体内容如下 因为以前直接用定时器,没去计算当前的时候,每次退出程序的时候,定时器一直不走,这个工具类简单的解决程序退出后台,定时器不走的bug,那么,直接上代码咯~~ /** * Created by zhuang.haipeng on 2017.9.11 * * 广告倒计时,验证码倒计时工具类 * * 用法: //60 * 1000 为60秒 , 60 * 60 * 100 为60分钟 ... * let

随机推荐