Home >Backend Development >PHP Tutorial >求教“权限管理”的思路,最好是通过“角色”+“权限”来实现的

求教“权限管理”的思路,最好是通过“角色”+“权限”来实现的

WBOY
WBOYOriginal
2016-06-23 14:27:421076browse

权限 角色

如题。。。

在复杂的权限设置面前,直接手写if、else我觉得应该是不行了吧

求教思路

回复讨论(解决方案)

在建表的时候就该有权限表,角色的一个属性外键关联这个表

在建表的时候就该有权限表,角色的一个属性外键关联这个表

可否说的再详细一些呢?主要是 写程序时  应该在哪一个环节来引入这个权限判断 如何引入

以前写过个小项目也是权限问题,我们是这样解决的:当用户登录时就把用户的信息(包括权限,我那时权限用的是数字。假如该用户权限为5)存在session中,当该他要做某个操作时比如删除(权限要求要>6),比较当前权限和要求权限的大小....太遥远了 记不太清楚了

一般身份识别(登录)后就引入角色到session,然后根据角色查表得到权限

表设计:角色关联菜单(一级菜单~二级菜单……),角色关联操作(查看,删除,搜索,修改)

先确定权限字的表示和存储
php 的整型数为 logn 类型,具有64个二进制位。
因此,足以满足大多数应用的需求。(每个二进制位表示一个动作)

每个角色具有一个权限字,每个用户可以具有多个角色
每个用户还可以拥有一个例外权限字

综合权限采用位运算求出:
用户权限 = 角色权限 xor 例外
其中:角色权限 = 用户隶属角色权限 or 用户隶属角色权限 ...

角色权限;权限菜单

先确定权限字的表示和存储
php 的整型数为 logn 类型,具有64个二进制位。
因此,足以满足大多数应用的需求。(每个二进制位表示一个动作)

每个角色具有一个权限字,每个用户可以具有多个角色
每个用户还可以拥有一个例外权限字

综合权限采用位运算求出:
用户权限 = 角色权限 xor 例外
其中:角色权限 = 用户隶属角色权限 or 用户隶属角色权限 ...

感谢。  关于权限的存储和分配说的非常清楚

那具体在调用时怎么使用呢?

比如现在有一个 删除 按钮

具有删除权限的角色们查看这个页面时可以看到这个按钮, 该怎么写? 用if、else吗?

点击删除按钮后提交到PHP 还需要再次判断权限吗?

条件判断总是必要的,不然如何知道谁是谁?
不过也很简单
$u = 0b1011; //用户权限
$p = 0b0010; //动作号(前面我已经讲了可以有64种动作)
if($p & $u) echo '有权限';

找一下RBAC设计模式

用户表关联用户组表,用户组表关联权限表,当用户进入的时候,先判断属于哪个组,然后根据组设定权限,很多开源产品都这么设计的。

简单的的  角色储存好每个方法, 使用这个方法时 判断这个用户角色是否有这个方法权限

RBAC权限模式就可以  这些网上一大堆,自己可以查查

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