如何根据用户权限更改DataFilter?

时间:2018-02-23 06:25:31

标签: aspnetboilerplate

根据权限有条件地为用户的整个会话启用/禁用过滤器的最佳位置在哪里?

例如,我有一个" CanSeeDeletedItems"权限,仅适用于管理员,我想将其应用于所有内容,即,当具有此权限的用户发出请求时,禁用SoftDelete过滤器。

我首先想到尝试将其包含在modelBuilder中,但很快意识到我无法从DAL访问服务层。

所以我的想法是以某种方式将一些代码添加到UOW的初始化程序中,但我不知道如何做到这一点,我希望这是一个已经考虑但未写入文档的案例。

我希望做这样的事情:

if (IsGranted("PermissionName")) 
CurrentUnitOfWorkProvider.Current.DisableFilter(AbpDataFilters.SoftDelete);`

2 个答案:

答案 0 :(得分:-1)

对于基于用户的禁用过滤器,可以使用Interceptor实现。 所以你需要做的是;为Application Services编写自定义拦截器。

此拦截器必须禁用/启用当前执行的过滤器

https://aspnetboilerplate.com/Pages/Documents/Articles/Aspect-Oriented-Programming-using-Interceptors/index.html#ArticleCreateInterceptor

使用代码块

禁用AspNet Boilerplate过滤器
using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.SoftDelete))
{
    var people2 = _personRepository.GetAllList();                
}

https://aspnetboilerplate.com/Pages/Documents/Data-Filters#disable-filters

全局禁用AspNet Boilerplate过滤器

Configuration.UnitOfWork.OverrideFilter(AbpDataFilters.SoftDelete, false);

https://aspnetboilerplate.com/Pages/Documents/Data-Filters#disable-filters-globally

答案 1 :(得分:-1)

如果需要,您可以全局禁用预定义过滤器。例如,要全局禁用软删除过滤器,请将此代码添加到模块的PreInitialize方法中:

Configuration.UnitOfWork.OverrideFilter(AbpDataFilters.SOFTDELETE, false);