Политики авторизации и домена в DDD: Должны ли аутентификация/авторизация обрабатываться на уровне приложения?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Политики авторизации и домена в DDD: Должны ли аутентификация/авторизация обрабатываться на уровне приложения?

Сообщение Anonymous »

В настоящее время я обучаю дизайн, управляемый доменом (DDD) и экспериментирую с обработкой аутентификации и авторизации с помощью доменной политики. Я новичок в DDD и не нашел много ресурсов, которые непосредственно обращаются к использованию политик в рамках домена. Я был бы признателен некоторым руководством по следующим вопросам: < /p>
У меня есть следующий код в моей службе приложений: < /p>
namespace Application;

public class UserService : IUserService
{
private readonly IUserRepository _userRepository;
private readonly IMapper _mapper;
private readonly ICurrentUserService _currentUserService;
private readonly ICreateUserPolicy _createUserPolicy;
private readonly IModifyUserPolicy _modifyUserPolicy;

public UserService(
IUserRepository userRepository,
IMapper mapper,
ICurrentUserService currentUserService,
ICreateUserPolicy createUserPolicy,
IModifyUserPolicy modifyUserPolicy)
{
_userRepository = userRepository;
_mapper = mapper;
_currentUserService = currentUserService;
_createUserPolicy = createUserPolicy;
_modifyUserPolicy = modifyUserPolicy;
}

public async Task CreateUserAsync(CreateUserDto createUserDto)
{
ValidationContext validationContext = new(createUserDto);
List validationResults = createUserDto.Validate(validationContext).ToList();

if (validationResults.Count > 0)
{
return Result.Failure(validationResults.Select(vr => vr.ErrorMessage!).ToList());
}

if (_currentUserService.Role is null)
{
return Result.Failure(new List { "You need to sign in." });
}

if (!_createUserPolicy.CanCreate(_currentUserService.Role.Value))
{
return Result.Failure(new List { "You don't have permission to create a user." });
}

User user = _mapper.Map(createUserDto);

if (await _userRepository.ExistsAsync(user.Sid))
{
return Result.Failure(new List { $"User with already exists." });
}

await _userRepository.AddAsync(user);

return Result.Success(user);
}
}
< /code>
и в доменном уровне у меня есть следующая политика: < /p>
namespace Domain.Policies;

public class PermissionPolicies : IPermissionPolicies
{
public bool CanCreateUsers(Role role) => role is Role.Manager;
[...]
}
< /code>
У меня есть несколько вопросов, касающихся этой реализации: < /p>
  • Разделение проблем: я предположил, что аутентификация и
    авторизация выполняются в службе приложения до
    вызывать логику домена. Это правильный подход в DDD? < /Li>
    Инварианты домена в качестве политики: приемлемо ли основывать
    аутентификацию и разрешение на политике, учитывая, что «кто может выполнять
    x»-это бизнес-инвариант в домене? Централизация
    цели), должен ли метод, который зависит от конкретной роли, также
    проверить внутренне (в пределах домена), что пользователь имеет
    соответствующую роль? Другими словами, должно ли это добавить исключение, если
    роль не действительна, рассматривая его как ошибку программирования? Правильно разделить эти проблемы в контексте DDD было бы очень оценено!
Заранее спасибо за вашу помощь!>

Подробнее здесь: https://stackoverflow.com/questions/795 ... ization-be
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»