基于原生PHP交叉会员权限控制
基于原生PHP交叉会员权限控制
对于一个网站的后台管理系统,单一的超级管理员权限往往不能满足我们的需求,尤其是对于大型网站而言,这种单一的权限会引发许许多多的问题出现。
比如:一个网站编辑,平时他只是负责公司网站的公告更新,但如果网站后台没有严格的权限限制,他是不是就可以操作到客户的一些信息,这是存在很大隐患的。
如果学过ThinkPHP框架的朋友一定知道有个东西叫RBAC,今天咱不说那个,来说说在原生PHP语言中,怎么实现交叉权限控制。
好了,话不多说,老样子,直接说原理,上代码。
对于权限的交叉控制可以有很多种方法实现,这里只是提供一种思路:(我采用的是二进制数的方法)
一、这里先提下按位与和按位或的运算方法:
1、按位与运算符(&)
参加运算的两个数据,按二进制位进行“与”运算。(“与”运算=>是否有包含的值如:7&8=0)
运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;
即:两位同时为“1”,结果才为“1”,否则为0
例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3&5的值得1。
另,负数按补码形式参加按位与运算。
2、按位或运算符(|)
参加运算的两个对象,按二进制位进行“或”运算。(“或”运算=>能包含的值如:7=4|2|1,用“异或”去除包含如:7^2)
运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;
即 :参加运算的两个对象只要有一个为1,其值为1。
例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111 因此,3|5的值得7。
另,负数按补码形式参加按位或运算。
了解了按位与和按位或的运算,我们来看下面这个例子:
复制代码
1
2 define('ADD',1);//二进制1
3 define('DELETE',2);//二进制10
4 define('UPDATE',4);//二进制100
5 define('SELECT',8);//二进制1000
6
7 //有权限为1,没有权限为0
8 $admin=ADD|DELETE|UPDATE|SELECT;//1111
9 $editor=ADD|UPDATE|SELECT;//1101
10 $user=SELECT;//1000
11 ?>
复制代码
我把增删改查分别做成了4个权限并定为常量
1的二进制数是1,2的二进制数是10,4的二进制数是100,8的二进制数是1000,这里刚好成一个规律
可能有些朋友会问上面权限变量admin,editor,user所对应的1111,1101,1000是怎么来的?
PHP里有一个十进制数转二进制数的函数叫decbin()
下面是对应的函数解释:
复制代码
decbin
(PHP 3, PHP 4, PHP 5)
decbin -- 十进制转换为二进制
说明
string decbin ( int number )
返回一字符串,包含有给定 number 参数的二进制表示。所能转换的最大数值为十进制的 4294967295,其结果为 32 个 1 的字符串。
例子 1. decbin() 范例
echo decbin(12) . "\n";
echo decbin(26);
?>
上例将输出:
1100
11010
参见 bindec(),decoct(),dechex() 和 base_convert()。
复制代码
我们来测试输出看看吧:
复制代码
1
2
3
4 define('ADD',1);//二进制1
5 define('DELETE',2);//二进制10
6 define('UPDATE',4);//二进制100
7 define('SELECT',8);//二进制1000
8
9 //有权限为1,没有权限为0
10 $admin=ADD|DELETE|UPDATE|SELECT;//1111 15
11 $editor=ADD|UPDATE|SELECT;//1101 13
12 $user=SELECT;//1000 8
13
14 echo decbin($admin)."
";
15 echo decbin($editor)."
";
16 echo decbin($user)."
";
17
18
19 ?>
复制代码
输出结果:
那么我们就可以运用这个运算来判断权限了,1代表有权限,0代表无权限
比如:
admin(超级管理员)拥有的权限是增删改查也就是1111——>0000 1111
editor(网站编辑)拥有的权限是增,改,查也就是1101——>0000 1101
user(普通用户)只拥有浏览、查询的权限也就是1000——>0000 1000
那么我们只要对它们进行按位与运算就可以判断是否具备权限了
例如:(从后往前看) 取十进制(数据库存储类型值)转二进制进行"与"运算
网站编辑权限 0000 1101(权限十进制为13) & 0000 0010(删除权限十进制为2转二进制为10) 结果:0000 0000 也就是没有具备权限
再来试试
普通用户权限 0000 1000 & 0000 0001(添加权限十进制为1二进制为1) 结果:0000 0000 也一样不具备权限
超级管理员权限0000 1111 & 0000 1101(网站编辑的权限) 结果:0000 1101 也就是具备了网站编辑的权限
好了看具体实例吧
我建了一个数据库,里面有2张表
一张是user用户表:
gid代表权限表的组id
一张是权限表:
flag代表增删改查的权限,可根据自己需要定义
基本配置页面:config.php
复制代码
1
2
3 define('HOST','localhost');
4 define('DBNAME','member');
5 define('USER', 'root');
6 define('PASS', '');
7
8
9 $link=@mysql_connect(HOST,USER,PASS) or die('数据库连接失败');
10
11 mysql_select_db(DBNAME,$link);
12
13 define('ADD',1);//二进制1
14 define('DELETE',2);//二进制10
15 define('UPDATE',4);//二进制100
16 define('SELECT',8);//二进制1000
17
18 //有权限为1,没有权限为0
19 $admin=ADD|DELETE|UPDATE|SELECT;//1111
20 $editor=ADD|UPDATE|SELECT;//1101
21 $user=SELECT;//1000
22 ?>
复制代码
登陆首页:index.html
复制代码
1
2
3
4
5
6
7
8
13
14
复制代码
提交页面:action.php
复制代码
1
2
3 require_once('config.php');
4 $username=$_POST['username'];
5 $password=$_POST['password'];
6
7
8 $sql="select * from user as a,role as b where a.gid=b.gid
9 and a.username='$username' and password='$password'";
10
11 $result=mysql_query($sql);
12 if($data=mysql_fetch_array($result)){
13 //账号验证通过,判断对应权限
14 //此处判断的是 是否具备删除权限 如:user数据库存储的值为8转二进制为1000 删除权限的值为2转二进制为0010 与运算0000 无权限
15 if($data['flag']&DELETE){
16 echo "你有删除权限";
17 }else{
18 echo "你没有删除权限";
19 }
20
21 }else{
22 echo "错误账号密码";
23 }
24
25
26 ?>

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

一、微信读书会员怎么买便宜呢?分享微信读书购买会员最优惠方法!1.打开微信读书APP,在阅读福利专场里面有个阅读挑战赛,参加阅读挑战。2.参加支付1元,阅读7天,时长>7小时,获得4天付费会员卡+4书币,一年可参与大约52周,如每次都参加共需要花费52元,总共可获得208天付费会员卡+208书币。3.参加支付3元,阅读14天,时长>14小时,获得10天付费会员卡+10书币,一年可参与大约26次,如每次都参加共需要花费78元,总共可获得260天付费会员卡+260书币。4.参加支付4元,阅读21天

可以让用户对系统进行更深入的操作和定制,root权限是一种管理员权限,在Android系统中。获取root权限通常需要一系列繁琐的步骤,对于普通用户来说可能不太友好、然而。通过一键开启root权限,本文将介绍一种简单而有效的方法,帮助用户轻松获取系统权限。了解root权限的重要性及风险拥有更大的自由度,root权限可以让用户完全控制手机系统。加强安全控制等,定制主题、用户可以删除预装应用。比如误删系统文件导致系统崩溃,过度使用root权限也存在风险、不慎安装恶意软件等,然而。在使用root权限前

qq音乐是很多用户们都在使用的一款听歌软件,在这里有一些歌曲是需要用户们拥有会员才能够后下载和播放的,那么如何免费领取qq音乐会员?下面就让本站来为用户们来仔细的介绍一下免费领取QQ音乐会员教程吧。 免费领取QQ音乐会员教程 1、首先我们打开QQ音乐。 2、进入我的主页,点击右上角的三条横线。 3、点击开启这里的免费听歌模式。 4、这里会出现一个15秒的广告,我们只需要等待广告结束,就可以获得三十分钟的会员体验。 体验时间可以叠加。 5、看完后就获得了会员。 领取1天QQ音乐

酷狗音乐APP如何取消会员自动续费?有很多用户办理了酷狗音乐的VIP自动续费服务,后面想要取消此服务,但又不清楚在哪里能够取消掉,下面小编带来酷狗音乐取消自动续费教程,希望对大家有所帮助。在酷狗音乐APP中取消自动续费很简单:只需进入会员中心,找到音乐包/豪华VIP选项,选择已开通自动续费,然后点击关闭续费即可。2.微信:下图所示,前往支付页面,点击右上角三个小点,选择扣费服务,点击酷狗音乐关闭服务;3.支付宝:前往设置页面,选择支付设置,选择免密支付/自动扣费,最后选择酷狗音乐解约。

知乎app会员怎么取消自动续费?知乎app手机一款非常实用的手机软件,这个软件上面有非常多的功能,每个功能都会给用户带来不一样的感觉。这个软件上面有一些内容是需要用户开通会员就可以进行阅读了。这个软件上面的会员不贵,而且连续包月的会员也会比较便宜了。有些玩家想知道要怎么取消自动续费,下面小编整理了取消自动续费的方法供大家参考。知乎app会员取消自动续费的方法知乎会员可以选择四种续费方式,包括苹果支付、微信支付、支付宝支付和百度支付。对于选择百度支付的用户,可以通过微信或支付宝支付来管理续费。

哔哩哔哩是拥有丰富资源的视频播放平台,包含了舞蹈区、鬼畜区、美食区、动物区等等。但是现在在B站上看视频很多时候都需要会员,不想花钱的话可以获取B站会员吗?小编这里就给大家带来b站大会员免费领取方法,希望可以帮到大家。 哔哩哔哩会员免费领取方法: 打开哔哩哔哩,点击“我的“。 在”创作中心“区域点击”创作首页“图标。 进入创作中心后,点击”任务中心“。 进入任务中心后,看相应的任务并完成,可以获得积

qq空间如何设置权限访问?在QQ空间中是可以设置权限访问,但是多数的小伙伴不知道QQ空间如何设置权限访问的功能,接下来就是小编为用户带来的qq空间设置权限访问方法图文教程,感兴趣的用户快来一起看看吧!QQ使用教程qq空间如何设置权限访问1、首先打开QQ应用,主页面点击左上角【头像】点击;2、然后左侧展开个人信息专区,点击左下角【设置】功能;3、进入到设置页面滑动,找到其中的【隐私】选项;4、接下来在隐私的界面,其中的【权限设置】服务;5、之后挑战到最新页面选择【空间动态】;6、再次在QQ空间设置

闲鱼APP中的“VIP会员”功能是为用户提供的一项增值服务。开通VIP会员的用户可以享受到一系列特权和优惠,如提高商品曝光率、获得更多展示机会、专享客服服务、交易保障升级等,有助于提升用户的买卖体验和效率。闲鱼怎么成为会员1、首先打开闲鱼软件,进入到首页中后可以切换到不同的页面,在这里我们点击右下角的【我的】;2、然后在的页面中我们可以查看到很多不同的信息,我们需要点击【我的鱼气值】;3、最后点击过后我们在该页面中就可以开通vip会员了;
