我一直在学习 MVC,并且正在研究无会话身份验证(以减少服务器压力/可扩展性,并且因为 AppFabric 缓存在 Azure 网站上托管会话的成本很高)。
我的用户信息存储在 SQL 中,每个用户都有一个部门、等级、角色和权限(角色/部门也有权限)。我在想我真正需要存储的只是他们在安全 cookie 中的 userId,如果它没有过期,请在 global.asax 中的每个请求中获取他们的其余信息。我会使用诸如http://eversystems.eu/Document/15/Sessionless_Authentication_with_Encrypted_Tokens之类的方法来保护它
我最终想要的是在我的 ViewModel 中使用自定义字段注释它们的能力
[Authorize(Roles="Admin")] [Authorize(Dept="IT")] [Authorize(Rank="Manager")]
或者在 Html 中说
@if(User.IsInDept("IT")
或者
@if(User.HasRank("Manager"))
我查看了扩展FormsAthenticationTicket
等Membership Provider / Roles
,IPricipal
但IIdentity
很难理解我将如何修改它们以实现我所追求的。我见过的例子有很多我不想要的额外膨胀,但我发现的最好的例子是@Ahmad Abu Raddad 在这里ASP.NET MVC - Set custom IIdentity or IPrincipal
如果有人能指出我是否朝着正确的方向前进或可能提出替代方案,我将不胜感激。