【发布时间】:2010-08-27 14:21:55
【问题描述】:
我创建了以下属性:
[Serializable]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class OperationPermissionAttribute : CodeAccessSecurityAttribute
{
private static PrincipalPermission _revoke = new PrincipalPermission(PermissionState.None);
private static PrincipalPermission _allow = new PrincipalPermission(PermissionState.Unrestricted);
private string _role;
private string _task;
private string _operation;
public OperationPermissionAttribute(SecurityAction action, string role, string task, string operation) : base(action)
{
_role = role;
_task = task;
_operation = operation;
}
public OperationPermissionAttribute(string role, string task, string operation)
: base(SecurityAction.Demand)
{
_role = role;
_task = task;
_operation = operation;
}
public override System.Security.IPermission CreatePermission()
{
var principal = System.Threading.Thread.CurrentPrincipal as AzManPrincipal;
if (principal == null)
return _revoke;
bool result = principal.IsOperationAllowed(_role, _task, _operation);
return result ? _allow : _revoke;
}
}
我是这样使用的:
[OperationPermission(SecurityAction.Demand, Roles.Administrator, "UserService", "Remove")]
public void Add(User user)
{
user.ValidateOrThrow();
_repository.Add(user);
}
运行代码给我以下错误:
缺少必需的构造函数。 (来自 HRESULT 的异常:0x8013143B),它是一个 COMException。
到底为什么我会得到它,它的真正含义是什么?
【问题讨论】:
-
我不认识“Roles.Administrator”。您是否尝试在 .NET 4.0 中运行它? CAS 已弃用。
-
它是一个具有我们自己角色的静态类。
-
我应该用什么来代替 CAS?
-
@Hans:你的陈述有几个问题。首先,CAS 在 .NET 4.0 中并没有真正被弃用,即使“裸”CLR 主机不再强制执行 CAS 策略。其次,主体权限不是真正的 CAS 权限,并且它们的评估不受 .NET 4.0 中 CAS 策略实施的更改的影响。
标签: c# .net security attributes code-access-security