目录
基于原生PHP交叉会员权限控制
首页 php教程 php手册 基于原生PHP交叉会员权限控制

基于原生PHP交叉会员权限控制

Jun 13, 2016 am 09:27 AM
会员 权限

基于原生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    

Document

 6

 7

 8    

 9         账号:

10         密码:

11            

12    

   

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 ?>

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

微信读书会员怎么买便宜呢?分享微信读书购买会员最优惠方法! 微信读书会员怎么买便宜呢?分享微信读书购买会员最优惠方法! Mar 16, 2024 am 08:22 AM

一、微信读书会员怎么买便宜呢?分享微信读书购买会员最优惠方法!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权限(快速获取root权限) 一键开启root权限(快速获取root权限) Jun 02, 2024 pm 05:32 PM

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

如何免费领取qq音乐会员?免费领取QQ音乐会员教程 如何免费领取qq音乐会员?免费领取QQ音乐会员教程 Mar 13, 2024 pm 08:37 PM

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

酷狗音乐APP会员自动续费取消方法说明 酷狗音乐APP会员自动续费取消方法说明 Mar 19, 2024 pm 07:28 PM

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

知乎app会员怎么取消自动续费 知乎app会员取消自动续费的方法 知乎app会员怎么取消自动续费 知乎app会员取消自动续费的方法 Mar 13, 2024 am 11:04 AM

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

哔哩哔哩会员怎么免费领取?b站大会员免费领 哔哩哔哩会员怎么免费领取?b站大会员免费领 Mar 15, 2024 pm 05:00 PM

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

qq空间如何设置权限访问 qq空间如何设置权限访问 Feb 23, 2024 pm 02:22 PM

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

闲鱼怎么成为会员_闲鱼开通vip会员方法介绍 闲鱼怎么成为会员_闲鱼开通vip会员方法介绍 Mar 20, 2024 pm 05:50 PM

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

See all articles