ADO.NET数据服务中的自定义授权

时间:2009-08-28 15:15:54

标签: security ado.net authorization wcf-data-services

我有一个公开实体框架数据模型(.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
}

但是我认为这很糟糕,我希望有更好的解决方案......任何想法? :(

1 个答案:

答案 0 :(得分: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!");
      }
}