我正在为我们的应用程序开发一些基于角色的安全性,我基本上想做定制的版本 MVC AuthorizeAttribute
- 但仅限于业务逻辑层,我们不链接到 MVC。
我看过PrincipalPermissionAttribute
但似乎没有办法自定义它,因为它是密封的。我只想创建一个自定义版本,我可以在其中检查任何角色列表中的成员资格,而无需使用多个属性,并且还定义在哪里查找角色成员资格。
.Net 中是否有类似的东西我错过了?或者是否有人对如何在不重新实现 ASP.Net 的 AuthorizeAttribute/RoleProvider/etc 的情况下做到这一点有一些见解?
编辑
我目前有一个命令式版本正在运行,但我宁愿有一个声明属性版本,因为它更容易在方法/类上方看到它。
现在,我的业务层的抽象基类中有以下内容:
protected void EnsureEditorLevelAccess()
{
var allowedRoles = new[]
{
Roles.Administrator,
Roles.Editor,
};
var roles = GetAccountRoles(GetCurrentUsername());
if (roles.Any(role => allowedRoles.Contains(role)))
{
return;
}
throw new SecurityException("You do not have sufficient privileges for this operation.");
}
我喜欢能够使用Roles.Administrator
etc,因为角色名称是可怕的(基于 Active Directory 组......),所以我正在考虑将这些细节包装在自定义属性的构造函数中,我可以在类/方法之上扑通一声.
GetAccountRoles
只是可注入角色提供者属性的外观,我可以将其设置为使用 AD 或使用数据库的测试版本。
我可以子类Attribute
化,但不确定它会如何启动安全检查。