Реализация WCF в базовом классе, роль PrincipalPermission в производных классах?

У меня есть несколько служб WCF, которые все реализуют метод All(), поэтому я создал общий базовый класс, который реализует этот метод All(), но каждый вызов службы WCF нуждается в своей собственной роли безопасности.

public class QueryService<T> 
    where T : class
{
    public IQueryable<T> All()
    {
        // query data
        return data;
    }
}

public class CarService : QueryService<Car>
{
    [PrincipalPermission(SecurityAction.Demand, Role = "Car_R")]
    public new IQueryable<Car> All()
    {
        return base.All();
    }
}

public class BikeService : QueryService<Bike>
{
    [PrincipalPermission(SecurityAction.Demand, Role = "Bike_R")]
    public new IQueryable<Bike> All()
    {
        return base.All();
    }
}

Есть ли способ переместить аннотацию PrincipalPermission в базовый класс (QueryService) и определить строку Role в моих производных классах, чтобы мне не пришлось переопределять каждый метод моего базового класса (и вызывать base.xxx).

Примерно так: (хотя не работает...)

public class QueryService<T> 
    where T : class
{
    public const string RoleFromDerivedClass = "Default";

    [PrincipalPermission(SecurityAction.Demand, Role = RoleFromDerivedClass)]
    public IQueryable<T> All()
    {
        // query data
        return data;
    }
}

public class CarService : QueryService<Car>
{
    public const string RoleFromDerivedClass = "Car_R";
}

public class BikeService : QueryService<Bike>
{
    public const string RoleFromDerivedClass = "Bike_R";
}

0 ответов

Другие вопросы по тегам