search
Homephp教程php手册基于原生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    

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

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
探索Windows 11指南:如何访问旧硬盘驱动器上的用户文件夹探索Windows 11指南:如何访问旧硬盘驱动器上的用户文件夹Sep 27, 2023 am 10:17 AM

由于权限,并不总是可以访问某些文件夹,在今天的指南中,我们将向您展示如何在Windows11上的旧硬盘驱动器上访问用户文件夹。此过程很简单,但可能需要一段时间,有时甚至数小时,具体取决于驱动器的大小,因此请格外耐心并严格按照本指南中的说明进行操作。为什么我无法访问旧硬盘上的用户文件夹?用户文件夹的所有权属于另一台电脑,因此您无法对其进行修改。除了所有权之外,您对该文件夹没有任何权限。如何打开旧硬盘上的用户文件?1.取得文件夹的所有权并更改权限找到旧的用户目录,右键单击它,然后选择属性。导航到“安

linux删除文件需要什么权限linux删除文件需要什么权限Jul 11, 2023 pm 01:26 PM

linux删除文件需要所在文件夹的所有权限,分别是读、写、执行。因为定位这个文件过程就需要进入文件夹,即使使用类似rm /xxx/fle的方式,同样系统内部也会进入文件夹,所以要对文件夹有执行权限,然后读取文件夹内容需要读的权限,最后是删除文件,由于文件是上级文件夹的一部分所以需要对文件夹有写的权限。

iOS 17:如何控制哪些应用程序可以访问您的照片iOS 17:如何控制哪些应用程序可以访问您的照片Sep 13, 2023 pm 09:09 PM

在iOS17中,Apple可以更好地控制应用程序可以看到的照片内容。继续阅读,了解如何按应用管理应用访问权限。在iOS中,Apple的应用内照片选取器可让您与应用共享特定照片,而照片图库的其余部分则保持私密。应用必须请求访问您的整个照片图库,您可以选择授予应用以下访问权限:受限访问–应用程序只能看到您可以选择的图像,您可以随时在应用程序中或通过转到“设置”>“隐私和安全”>“照片”来查看所选图像。完全访问权限–App可以查看照片

CentOS搭建web服务器前需注意的权限与访问控制策略CentOS搭建web服务器前需注意的权限与访问控制策略Aug 05, 2023 am 11:13 AM

CentOS搭建web服务器前需注意的权限与访问控制策略在搭建web服务器的过程中,权限与访问控制策略是非常重要的一环。正确设置权限和访问控制策略可以保护服务器的安全性,防止非授权用户访问敏感数据或者对服务器进行不当操作。本文将介绍在CentOS系统下搭建web服务器时需要注意的权限与访问控制策略,并提供相应的代码示例。用户与组的管理首先,我们需要创建一个专

PHP如何实现角色权限管理系统?PHP如何实现角色权限管理系统?Jun 29, 2023 pm 07:57 PM

PHP是一种广泛应用的编程语言,被广泛用于创建和开发各种Web应用程序。在许多Web应用中,角色权限管理系统是一个重要的功能,它可以确保不同用户拥有适当的访问权限。本文将介绍如何使用PHP来实现一个简单而实用的角色权限管理系统。角色权限管理系统的基本概念是将用户分为不同的角色,并为每个角色分配相应的权限。这样,用户只能执行他们有权限执行的操作,从而保证系统的

trustedinstaller权限怎么获得「推荐获取TrustedInstaller权限操作步骤」trustedinstaller权限怎么获得「推荐获取TrustedInstaller权限操作步骤」Feb 06, 2024 pm 05:48 PM

这篇文章将带你了解TI的本质是什么,进一步探索如何在powershell和NtObjectManager模块的帮助下获取TI权限,以便在操作系统中完成任何你想要的操作。如果你曾经管理过Windows系统,那么你应该熟悉trustedInstaller(TI)组的概念。TI组在系统文件和注册表的操作中具有重要的权限。举个例子,你可以查看System32文件夹下文件的属性,在安全选项中,TI组和文件所有者具有删除和修改文件的权限,甚至管理员也无法直接修改安全选项。因此,对于系统文件和注册表的操作,需

手机档案存取权限是什么手机档案存取权限是什么Jul 19, 2022 pm 03:50 PM

手机档案存取权限是指允许APK文件读写手机的内存;如果允许APK文件访问手机的内存,那么就可以将应用安装在手机中,如果不允许APK文件访问手机的内存,那么手机就不能安装应用。

win7修改文件提示更改权限拒绝访问如何解决win7修改文件提示更改权限拒绝访问如何解决Jul 04, 2023 pm 07:01 PM

  win7修改文件提示更改权限拒绝访问如何解决?一些系统文件在进行修改的时候,常常会提示我们没有权限去进行操作。我们可以去进行文件夹权限的功能关闭,或者获取管理员权限。需要修改此类文件的用户,一起来看看接下来具体的教程分享吧。win7修改文件提示更改权限拒绝访问解决办法  1、首先选中对应文件夹,点击上方工具,选中文件夹选项。  2、进入查看选项卡。  3、取消勾选使用简单文件共享然后确定。  4、然后右键选择对应文件夹,点击属性。  5、进入安全选项卡。  6、选择图示位置,点击高级。  7

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

Repo: How To Revive Teammates
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
1 months agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor