Security ADO.NET数据服务中的自定义授权
我有一个ADO.NET数据服务,它公开一个实体框架数据模型(.edmx) 我需要允许/拒绝某些用户对某些实体的读/写操作。我使用Windows身份验证。我所能找到的就是覆盖OnStartProcessingRequest:Security ADO.NET数据服务中的自定义授权,security,ado.net,authorization,wcf-data-services,Security,Ado.net,Authorization,Wcf Data Services,我有一个ADO.NET数据服务,它公开一个实体框架数据模型(.edmx) 我需要允许/拒绝某些用户对某些实体的读/写操作。我使用Windows身份验证。我所能找到的就是覆盖OnStartProcessingRequest: protected override void OnStartProcessingRequest(ProcessRequestArgs args) { base.OnStartProcessingRequest(args); bool isBatch = a
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
}
然而,我认为这很糟糕,我希望有一个更好的解决方案。。。有什么想法吗(您可以为每个用户设置服务初始化的实体权限,如
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!");
}
}
您可以为每个用户设置服务初始化的实体权限,如
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!");
}
}
如果您不希望ppl具有对整个表/资源的特定访问权限,则应使用第一个示例。第二个示例可用于以下情况:用户无法创建超出特定价格差的产品,这取决于某些服务器端计算。如果您不希望ppl具有特定访问权限,则应使用第一个示例对于整个表/资源,第二个示例可用于诸如用户无法创建超出特定价格差(取决于某些服务器端计算)的产品这样的场景。