PHP权限分配思路

2025-05-14 06:37:46
推荐回答(4个)
回答1:

可以,但是这样不便于管理,因为你的是用户直接与权限打交道,关于权限的思路以下有4种常见的分类,你所说的属于第4类,不推荐使用,推荐使用前3类(用的最多的是第3类):


1.用户+组+角色+权限

2.用户+组+权限

3.用户+角色+权限

4.用户+权限


我来举个例子,就拿第3类来举例:

权限:用户操作的具体事件如:添加管理员,修改管理员,删除管理员

角色:角色指定某一类用户拥有固定的权限,例如:超级管理员,管理员

用户:最终执行权限的用户,如:admin,admin2


那么我们根据:用户+角色+权限,需要3个表互相关联(每个表的id是唯一标识符,也就是主键)用户表level字段用来存储level表id,level表permission字段用来存储permission表id

用户表:php_user | 数据:id = 1, username = admin, level = 1 |  id = 2, username = admin2, level = 2

等级表:php_level | 数据:id = 1, level_name = 超级管理员, permission = 1,2,3 | id = 2, level_name = 管理员, permission = 2

权限表:php_permission 数据:id = 1, permission_name = 添加管理员 | id = 2, permission_name = 修改管理员 | id = 3, permission_name = 删除管理员


如果还没看懂,请再看下面的PHP实际例子:

// ... 之前的操作,如先连接数据库,登录用户
$_COOKIE['username'] = 'admin2'; // 用户名称
// SQL查询语句,查询用户等级,用来判断是否可以:添加管理员
$sql = "SELECT `level` FROM `php_user` WHERE `username` = '{$_COOKIE['username']}' LIMIT 1;";
// 获取查询结果
$result = msyql_query($sql);
// 解析结果集
$array = mysql_fetch_assoc($result);
// 在创建SQL语句用来查询等级表获取操作权限
$sql = "SELECT `permission` FROM `level` WHERE `id` = '{$array['level']}' LIMIT 1;";
// 获取查询结果
$result = msyql_query($sql);
// 解析结果集
$array = mysql_fetch_assoc($result);
// 创建权限数组,用SESSION存储,记得开启SESSION,session_start();
// 使用,逗号分割权限字符,例如:1,2,3 = array(1, 2, 3)
$_SESSION['permission'] = explode(',', $array['permission']);
// 最后来判断是否有操作权限
if (!in_array(1, $_SESSION['permission'])) exit('无权操作!');
// 授权成功,开始:添加管理员,但是我们的用户是admin2,他是管理员,他的权限只有:修改管理员,因此admin2无权操作:添加管理员


以上如果还是没有明白或有任何的问题,可以随时追问~

回答2:

可以尝试一下建立一个权限表。包含字段:权限id,以及权限描述
用户表和权限表关联一个字段,比如 note字段
note字段存储权限id
用户登录时,检测到权限id,然后根据权限id查询权限表,来判断用户的权限
然后根据权限进行分配,哪些操作显示与不显示,或者哪些操作能用不能用

回答3:

参考一下:rbac权限理论!RBAC模型

回答4:

如果项目不大,直接在栏目表中添加一个uid字段,字符串形式的,容许的uid用逗号|等字符分割开,然后用户操作某个栏目节点时候,可以把uid字符串切割为数组,然后用当前登陆的uid作为数组的value去查询,这个功能php有现成函数是使用,这样也省得写什么rbac了,那还得多弄好几张表呢,理解也麻烦,希望此方法可以帮到你