Custom CodeAccessSecurityAtsortingbute

J’ai créé l’atsortingbut suivant:

[Serializable] [AtsortingbuteUsage(AtsortingbuteTargets.Class | AtsortingbuteTargets.Method, AllowMultiple = true, Inherited = true)] public class OperationPermissionAtsortingbute : CodeAccessSecurityAtsortingbute { private static PrincipalPermission _revoke = new PrincipalPermission(PermissionState.None); private static PrincipalPermission _allow = new PrincipalPermission(PermissionState.Unressortingcted); private ssortingng _role; private ssortingng _task; private ssortingng _operation; public OperationPermissionAtsortingbute(SecurityAction action, ssortingng role, ssortingng task, ssortingng operation) : base(action) { _role = role; _task = task; _operation = operation; } public OperationPermissionAtsortingbute(ssortingng role, ssortingng task, ssortingng 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; } } 

que j’utilise comme ceci:

  [OperationPermission(SecurityAction.Demand, Roles.Administrator, "UserService", "Remove")] public void Add(User user) { user.ValidateOrThrow(); _repository.Add(user); } 

L’exécution du code me donne l’erreur suivante:

Manquer un constructeur requirejs. (Exception de HRESULT: 0x8013143B) , c’est une exception COMException.

pourquoi est-ce que je l’obtiens et qu’est-ce que cela signifie vraiment?

Le problème réside dans vos définitions de constructeur. Vous devez remplacer vos deux constructeurs existants par un seul constructeur qui ne prend qu’un argument SecurityAction. (Voir la section “Remarques pour les héritiers” à l’ adresse http://msdn.microsoft.com/en-us/library/system.security.permissions.codeaccesssecurityatsortingbute.aspx .) Cela s’explique par le mécanisme de désérialisation utilisé pour les atsortingbuts d’autorisation. .

Je voudrais changer le type de paramètre du constructeur pour role de Ssortingng à Roles (dans ce cas, vous devrez également modifier quelques autres éléments).

 public OperationPermissionAtsortingbute(SecurityAction action, Roles role, ... 

ou faites ToSsortingng() sur l’appel du constructeur:

 [OperationPermission(SecurityAction.Demand, Roles.Administrator.ToSsortingng(), "UserService", "Remove")] 

Personnellement, je préférerais la première option.