根据权限有条件地为用户的整个会话启用/禁用过滤器的最佳位置在哪里?
例如,我有一个" CanSeeDeletedItems"权限,仅适用于管理员,我想将其应用于所有内容,即,当具有此权限的用户发出请求时,禁用SoftDelete过滤器。
我首先想到尝试将其包含在modelBuilder中,但很快意识到我无法从DAL访问服务层。
所以我的想法是以某种方式将一些代码添加到UOW的初始化程序中,但我不知道如何做到这一点,我希望这是一个已经考虑但未写入文档的案例。
我希望做这样的事情:
if (IsGranted("PermissionName"))
CurrentUnitOfWorkProvider.Current.DisableFilter(AbpDataFilters.SoftDelete);`
答案 0 :(得分:-1)
对于基于用户的禁用过滤器,可以使用Interceptor实现。 所以你需要做的是;为Application Services编写自定义拦截器。
此拦截器必须禁用/启用当前执行的过滤器
使用代码块
禁用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);