2009-08-28 3 views
1

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

Мне нужно разрешить/отклонить чтение/запись определенным объектам для определенных пользователей. Я использую проверку подлинности 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 
} 

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

ответ

4

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

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!"); 
     } 
} 
+1

первый пример должен быть использован, если вы не хотите ppl, чтобы иметь конкретный доступ ко всей таблице/ресурсу , второй пример можно использовать в сценариях, таких как пользователь, которые не могут создавать продукты, которые превышают определенный ценовой марж, который зависит от расчета на стороне сервера. – dmportella

+0

Отличный ответ! +1 –

Смежные вопросы