asp.net - 关于 ASP.NET Core 中的授权
问题描述
我正在尝试为 Asp.net Core 构建基于权限的授权,同时我正在从 .net 框架迁移到核心。我根据自己的需要(使用身份)构建了一个授权系统。基本上我正在向角色添加声明,并且用户具有角色。我构建了用于将角色分配给用户并将声明分配给角色的复选框。一切正常,但这是我的问题:
在系统工作时,假设 user1 具有“管理员角色”。user1 可以根据使用他的角色->声明的策略访问页面。问题从这里开始。当 user1 登录时,如果我更改“管理员”角色的声明,用户 1 将在他/她注销并再次登录之前生效。
任何人都有解决这个问题的想法?
解决方案
该解决方案似乎有效……但让我提个醒……
- 性能问题
由于您必须检查每个客户端请求的数据库权限(这将对系统造成真正的负担)。我知道您似乎正在构建经典的单声道应用程序。但是服务器仍然会遭受来回数据库的困难。
- 用户不知道发生了什么。
想象一下,您显示一个用户通常经常访问的报告部分,但在某个美好的一天......浏览器空白,或者弹出一些她没有权限再使用它的对话框。这可能会导致真正的问题,因为用户目前只使用他们需要的东西。如果距离会议还有 10 分钟,并且需要帮助打印一些报告和弹出窗口,会发生什么?(来自我的经验教训(XD))。
所以我强烈建议,在应用程序部署和用户登录时,从数据库中获取他们所有的角色和声明一次并将它们缓存在某个地方(例如IMemoryCache
,因为我们的目标是经典的单声道应用程序),然后检查缓存声明。
每次用户权限发生变化时,更新缓存,并在此时注销用户。如果有不好的事情发生。用户会对设置权限的人大喊大叫,而不是我们作为开发人员。
自上次以来,您似乎已经连续花费了几个小时来完成自己的体面解决方案。
好同事