Как предотвратить выполнение метода C # с использованием валидатора атрибута? - PullRequest
3 голосов
/ 22 марта 2010

Я хотел бы создать валидатор на основе атрибутов, который идет на несколько шагов дальше того, что я видел в примерах. Это в основном предотвратит выполнение методов или других функций.

Обратите внимание, что мне приходится использовать AzMan , поскольку у меня нет доступа к Active Directory в этом сценарии.

Вот некоторый псевдокод того, что я ищу:

// Attribute validator class AttributeUsage is arbitrary at this point and may include other items
[AttributeUsage( AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true, Inherited = true )]
public class PermissionsValidatorAttribute : Attribute
{
 public PermissionsValidatorAttribute(PermissionEnumeration permission){...}
 public bool UserCanCreateAndEdit(){...}
 public bool UserCanDelete(){...}
 public bool UserCanUpload(){...}
}

Вот образец класса / члена, который будет украшен. Метод не будет выполнен вообще, если PermissionValidator.UserCanDelete () не возвращает true, где бы он ни выполнялся:

public class DoStuffNeedingPermissions
{
 [PermissionValidator(PermissionEnumeration.MustHaveDeletePermission)]
 public void DeleteSomething(){...}
}

Я знаю, что это простой, неполный пример. Но вы должны понять суть того, что мне нужно. Сделайте предположение, что DeleteSomething () уже существует, и я предпочитаю НЕ изменять код в методе вообще.

В настоящее время я смотрю на такие вещи, как блок приложения проверки, и работаю с пользовательскими атрибутами POC. Но я хотел бы услышать мнения с примерами кода от всех там. Я также определенно не против других методов достижения того же самого, таких как методы расширения или что-то еще, что может работать для достижения того же самого. Пожалуйста, помните, что я делаю попытку минимизировать изменения в существующем коде DoStuffNeedingPermissions. Спасибо всем!

Ответы [ 2 ]

4 голосов
/ 22 марта 2010

Существует ли причина, по которой вы не рассматриваете атрибут PrincipalPermission ?

[PrincipalPermissionAttribute(SecurityAction.Demand, Name="Bob",
Role="Supervisor")]
1 голос
/ 22 марта 2010

Я думаю, что ключ не в том, чтобы изменить DoStuffNeedingPermissions. Вы должны будете изменить все, что вызывает методы этого класса, чтобы они проверяли разрешения. Это явно навязчиво. Если бы у меня было для использования атрибутов, я бы посмотрел на использование возможностей перехвата инфраструктуры AOP, чтобы обернуть вызов выполнения и проверить его там. Это работает, потому что безопасность - это типичный случай сквозных проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...