PHP权限分配思路

做用户权限的思路,大家看下我的思路对不对:网站内有好多栏目,每个栏目有不懂的栏目ID新建一个表,表里面记录用户ID与所拥有管理权限的栏目ID用户登录时,将用户的权限字段读... 做用户权限的思路,大家看下我的思路对不对:

网站内有好多栏目,每个栏目有不懂的栏目ID
新建一个表,表里面记录用户ID与所拥有管理权限的栏目ID
用户登录时,将用户的权限字段读取并session,将session的权限信息数组化,然后进行验证用户是否有权限管理栏目。
展开
 我来答
易寄波Re
推荐于2017-09-06 · TA获得超过404个赞
知道答主
回答量:59
采纳率:0%
帮助的人:88.6万
展开全部

可以,但是这样不便于管理,因为你的是用户直接与权限打交道,关于权限的思路以下有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无权操作:添加管理员


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

追问
非常感谢您的精彩回答,再问您个问题,username是用$_COOKIE效率高,还是SESSION呢?
追答
一般的应用cookie与session的效率是体现不出来的。首先cookie与session都会创建会话文件,如果用户数量大或巨大的话,cookie的会话文件是保存在客户机中,对于服务端硬盘减轻了很大的压力,但是缺点是容易被篡改;session的会话文件保存在服务端,会加大服务端硬盘读取的压力,因此不易于大规模的运用。但是在Web开发当中有一个约定,前台用户登陆一律cookie(减轻服务端压力),后台管理员登录一律用session(管理员数量少,且要求安全性高,因此选择session,不易被篡改)
汲笑卉0fl6fa
2013-06-13 · 超过29用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:76.4万
展开全部
可以尝试一下建立一个权限表。包含字段:权限id,以及权限描述
用户表和权限表关联一个字段,比如 note字段
note字段存储权限id
用户登录时,检测到权限id,然后根据权限id查询权限表,来判断用户的权限
然后根据权限进行分配,哪些操作显示与不显示,或者哪些操作能用不能用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
burnfar
2013-06-13 · TA获得超过238个赞
知道小有建树答主
回答量:660
采纳率:60%
帮助的人:140万
展开全部
参考一下:rbac权限理论!RBAC模型
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友278bf1c
2013-06-13 · TA获得超过252个赞
知道答主
回答量:126
采纳率:0%
帮助的人:70.2万
展开全部
如果项目不大,直接在栏目表中添加一个uid字段,字符串形式的,容许的uid用逗号|等字符分割开,然后用户操作某个栏目节点时候,可以把uid字符串切割为数组,然后用当前登陆的uid作为数组的value去查询,这个功能php有现成函数是使用,这样也省得写什么rbac了,那还得多弄好几张表呢,理解也麻烦,希望此方法可以帮到你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式