关于权限角色的存储

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

大家都是如何做的。

阅读 4.5k
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中。

提示,您没有权限访问。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题