1

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

1 回答 1

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!");
      }
}
于 2009-09-22T15:42:55.127 回答