[英]ASP.NET Roles Authentication - Using Roles as Activities?
我要比基于简单角色的授权(管理员,用户,超级用户等)更进一步
而是进行基于活动的授权。
我的想法是将活动分配给已登录的用户,这与他们是否可以执行操作有关。
例如
创建用户
ReadUser
UpdateUser两个
DeleteUser
我将创建与上述活动相关的页面
即
CreateUser.aspx
在每个页面上,我都会进行检查,以查看经过身份验证的用户是否确实有权访问该活动。
我会通过使用角色来做到这一点。
例如
IsInRole( “CREATEUSER”)
在此之前,我可以在成功登录后将活动(角色)分配给已认证的用户
我唯一真正关心的是,通过此操作,当我对用户进行身份验证并构建身份验证cookie时,它将为每个用户(可能)包含很多角色。
例如,我当前在系统中有60个活动(但是随着我们添加更多功能,这个活动可能会增加-每个功能本身都有一个新活动)
如果身份验证cookie必须承担大约60多个角色(活动),会导致任何已知问题吗?
有人可以建议替代方法吗?
您可能需要研究IdentityModel框架 。 它具有用于构建自定义Authorize模块以基于Resource-Action模式验证权限的基类。 但这是为.NET 4.5构建的,不确定您的平台是什么。
.NET 4.5还包括用于Web身份验证的SessionAuthenticationModule(SAM)。 SAM可以在用户调用之间缓存角色,因此您不必在Cookie中来回发送角色。 以下是有关其工作原理的更多信息。
您想要的是一种功能列表方法。
解决方案是将角色映射到功能,类似于:
>Online Anon User Admin
Article ReadOnly ReadWrite ReadWrite
Article.List ReadOnly ReadOnly ReadOnly
Article.Edit Hidden ReadWrite ReadWrite
Article.Delete Hidden ReadOnly ReadWrite
Article.Title.Edit * * ReadWrite
实际上,这些将是您的坐标:
>(system state)
该系统可能是“在线,离线,维护”,甚至可能更多。 使用首字母>
在文件中查找矩阵的开头(您将有许多这样的名字)。 在C#中,您将有一个enum
。
角色在同一行上:
Anon User Admin
然后,在左侧,您可以将功能分为命名空间和操作:
<item>
<item>.<action>
<item>.<field>.<action>
<item>.<field>.<value>.<action>
单元格将包含以下值之一:
Hidden, ReadOnly, ReadWrite or *
*
表示从父项或字段“继承”。
这样,您将能够根据项目,操作,角色和当前系统状态来微调权限。
一个简单的解析器会将列表转换为内存结构。 不要将其放在数据库上,这会很痛苦。 将其保持在文本文件/内存级别更好。 添加FileSystemWatcher
可以在更改该文件以获取其他功能时读取该文件,并利用延迟加载。 另外,将其存储在Application state
存储器中,而不是在会话中。
请记住: 默认设置为“ Hidden
(甚至没有读取访问权限,该角色将完全无法访问该项目/操作。
然后,您真正关心的是您真正需要哪个角色(以我的经验,一个角色几乎映射到UML参与者,也许会有一些细微的差异),以及项目/字段/值和动作的真正含义。 当您写一个项目时,您实际上可以指一组项目。 无需将功能列表直接映射到数据库/实体或代码结构。 功能列表处于较高的语言级别,它是语义的,并且绑定到域,而不是代码(我想强调这一点,因为这是此方法背后的真正力量)。
一旦使用简单的解析器和帮助器对象实现了这种方法(建议使用信息专家原则,避免使用Singletons),您将可以在许多应用程序中重用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.