php - 关于权限角色的存储
迷茫
迷茫 2017-04-10 18:09:10
[PHP讨论组]

对于权限的存储,哪种方式更好呢?
1.角色id以及权限,登录时全存到session中。
2.角色id存到session中,权限用到时,再从数据库中去取。
3.角色id存session.权限存到缓存文件中。

大家都是如何做的。

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(5)
天蓬老师

首先前提:用户发过来的东西都是不可信的。
你给用户ID,1,期望用户1只访问有权限1的资源,用户也可能自己用工具把自己的请求头改了,改成2,那么2的资源就泄露了。
所以你给用户的除了ID,还要有个随机值,这个值和ID加起来才能确认用户1是用户1。这两个存在session+cookie这个组合里。

同样权限也是,不能让用户保存的数据决定权限,不然他又修改了怎么办。还是要在后端做验证,服务端应该有个表,记录着对应用户(或用户组)有什么权限。

至于这个表你打算存在哪里,就是设计问题了,有个大内存的话就存在缓存里呗,比如redis,就非常适合 key:value 这种数据。我的用户权限都是用二进制与或非存的,都是 100:0b010101这种感觉。如果你没有大内存,不非常重视性能的话,也可以直接存mysql。当然如果比较喜欢折腾,你甚至可以搞静态文件当缓存存储,这就是你的设计问题了。

巴扎黑

这个太初级了。最好是在设计url 的时候就定义好,/pub/ /pri/ 根据访问的url 来判断。

阿神

之前我做的时候,是将UID,角色ID存储在session中,权限还是放在数据库中。然后我会写个public的类,以后所有的控制器均继承这个类,在public类中通过构造函数__construct,来实现判断用户是否有权限访问该URL。

黄舟

简单点来讲,存储个角色ID就好了。
可以什么都不存,要做到即时修改即时响应的话,你最后还是要去数据库里去匹配权限。
当然需要根据你的规则表和访问的url进行权限验证。

天蓬老师

首先每个方法就是每个功能节点。

功能权限:对节点的管理。
角色管理:创建角色,进行绑定功能节点。

管理员进行绑定角色,管理员与角色进行管理。

登录系统时,获取刚管理员下的所有功能节点,存储到 Session 中。

如果管理访问的功能节点,未在Session中。

提示,您没有权限访问。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号