对于权限的存储,哪种方式更好呢?
1.角色id以及权限,登录时全存到session中。
2.角色id存到session中,权限用到时,再从数据库中去取。
3.角色id存session.权限存到缓存文件中。
大家都是如何做的。
对于权限的存储,哪种方式更好呢?
1.角色id以及权限,登录时全存到session中。
2.角色id存到session中,权限用到时,再从数据库中去取。
3.角色id存session.权限存到缓存文件中。
大家都是如何做的。
之前我做的时候,是将UID,角色ID存储在session中,权限还是放在数据库中。然后我会写个public的类,以后所有的控制器均继承这个类,在public类中通过构造函数__construct,来实现判断用户是否有权限访问该URL。
首先每个方法就是每个功能节点。
功能权限:对节点的管理。
角色管理:创建角色,进行绑定功能节点。
管理员进行绑定角色,管理员与角色进行管理。
登录系统时,获取刚管理员下的所有功能节点,存储到 Session 中。
如果管理访问的功能节点,未在Session中。
提示,您没有权限访问。
2 回答2.5k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
1 回答845 阅读✓ 已解决
2 回答519 阅读✓ 已解决
937 阅读
2 回答562 阅读
首先前提:用户发过来的东西都是不可信的。
你给用户ID,1,期望用户1只访问有权限1的资源,用户也可能自己用工具把自己的请求头改了,改成2,那么2的资源就泄露了。
所以你给用户的除了ID,还要有个随机值,这个值和ID加起来才能确认用户1是用户1。这两个存在session+cookie这个组合里。
同样权限也是,不能让用户保存的数据决定权限,不然他又修改了怎么办。还是要在后端做验证,服务端应该有个表,记录着对应用户(或用户组)有什么权限。
至于这个表你打算存在哪里,就是设计问题了,有个大内存的话就存在缓存里呗,比如redis,就非常适合 key:value 这种数据。我的用户权限都是用二进制与或非存的,都是 100:0b010101这种感觉。如果你没有大内存,不非常重视性能的话,也可以直接存mysql。当然如果比较喜欢折腾,你甚至可以搞静态文件当缓存存储,这就是你的设计问题了。