Я нашел здесь несколько ответов на эту тему, но они не полностью охватывают мой вопрос.
Моя цель - сделать так, чтобы у лица был пользователь в качестве владельца.
Я определяю интерфейс IMustHaveUser
public interface IMustHaveUser
{
long UserId { get; set; }
}
Затем я реализую это в своей сущности. Продукт
Я регистрирую пользовательский фильтр в EFCoreModule в методе preinitialize
public override void PreInitialize() {
//Register custom data filters
Configuration.UnitOfWork.RegisterFilter("MustHaveUser", true);
//other code here...
}
И, наконец, настройте мой фильтр в DBContext.
Определите свойство, которое проверяет, что фильтр включен
protected virtual bool IsMustHaveUserFilterEnabled => CurrentUnitOfWorkProvider?.Current?.IsFilterEnabled("MustHaveUser") == true;
И переопределить метод CreateFilterExpression.
protected override Expression<Func<TEntity, bool>> CreateFilterExpression<TEntity>()
{
var expression = base.CreateFilterExpression<TEntity>();
if (typeof(IMustHaveUser).IsAssignableFrom(typeof(TEntity)))
{
Expression<Func<TEntity, bool>> userFilter = e => ((IMustHaveUser) e).UserId == AbpSession.UserId || (((IMustHaveUser) e).UserId == AbpSession.UserId) == IsMustHaveUserFilterEnabled;
expression = expression == null ? userFilter : CombineExpressions(expression, userFilter);
}
return expression;
}
Теперь, когда я создаю сущность, я должен вручную настроить UserID.
В основном я написал ProductManager в доменном слое с методом
void Create(Product product, UserIdentity user){
product.UserId = user.UserId;
//Other business rules and insert with repository
}
Мой вопрос о настройке текущего идентификатора пользователя. Есть ли другой самый простой (лучший) способ сделать это?