Пользовательская авторизация в ADO.NET Data Services - PullRequest
1 голос
/ 28 августа 2009

У меня есть служба данных ADO.NET, которая предоставляет модель данных Entity Framework (.edmx).

Мне нужно разрешить / отклонить чтение / запись для определенных объектов для определенных пользователей. Я использую аутентификацию Windows. Все, что я мог найти, это переопределить OnStartProcessingRequest:

protected override void OnStartProcessingRequest(ProcessRequestArgs args)
{
    base.OnStartProcessingRequest(args);

    bool isBatch = args.IsBatchOperation;
    System.Uri requestUri = args.RequestUri;

    // parse uri and determine the entity and the operation
    // (i.e.: select/update/delete/insert) will be determined by the HTTP verb
}

Однако я думаю, что это отстой, и я надеюсь на лучшее решение ... Есть идеи? (

1 Ответ

4 голосов
/ 22 сентября 2009

Вы можете установить права объекта при инициализации службы для каждого пользователя, например

config.SetEntitySetAccessRule("Orders", UserRights.GetRights(identity, "Orders"));

config.SetEntitySetAccessRule("Products", UserRights.GetRights(identity, "Products"));

Основными недостатками применения видимости ресурса таким способом является то, что видимость находится на уровне объекта, а не на уровне строки.

Вы можете преодолеть это с помощью комбинации сервисных операций и смены перехватчиков.

[ChangeInterceptor("Products")]
public void OnProductsChange(Products product, UpdateOperations operations)
{
      if(!UserRights.HasAccessRights(identity, "Products", operations))
      {
             throw new DateServicesException(404, "Access denied!");
      }
}
...