Рассмотрим следующую строку кода, вводимого в каждую операцию моего ServiceContract:
if (!Roles.IsUserInRole("Administrators"))
throw new Exception("You are not authorized to perform this operation");
В будущем я хотел бы добавить больше, чем просто это, возможно, я захочу где-нибудь записать неудачный вызов. Это означало бы, что я должен изменить поведение в каждой моей операции.
Вместо этого я хотел бы создать собственный атрибут, который я мог бы иметь в моих OperationContracts: RequireMinimumRoleAttribute
, который бы выглядел следующим образом: [RequireMinimumRole("Administrators"]
.
Прежде всего, я хочу, чтобы это работало как контекст фильтра в MVC, я хочу проверить Роль до того, как будет вызвана фактическая операция. Это возможно?
Во-вторых, я хотел бы иметь еще один атрибут, который я наложил на мой ServiceContract: FallbackRequireMinimumRoleAttribute
, который использовался бы, если бы RequireMinimumRoleAttribute
не был указан в определенной операции.
Пример
Договор на обслуживание
[ServiceContract]
public class ICalculator
{
[OperationContract]
public int Add(int a, int b);
[OperationContract]
public string Information();
}
Осуществление
[FallbackRequireMinimumRole("Users")]
public class Calculator : ICalculator
{
[RequireMinimumRole("Administrators")]
public int Add(int a, int b) { return a + b; }
public string Information() { return "This is a calculator service"; }
}
В этом случае Add
потребует права администратора, а операция Information
потребует только права пользователя.
Возможно ли это? Если да, то как?