DDD中的权限检查方法

问题描述 投票:0回答:1

我正在使用CQRS,想检查用户的某些权限,但是对于在哪里放置此检查方法感到困惑。

为了理解我的问题,我将提供一些有关结构的信息:

  • 我有两个实体:UserTodo
  • 存在一个称为TodoCreate的组
  • 并且如果该组中的用户可以创建Todo,否则他们将无法创建。

我在User实体中为此数组添加了数组和getter以获取用户组。

class User{
...
private $groups;

...

public function groups():array{
   return $this->groups;
}

public function hasPermissionOnGroup(int $groupId):bool{
   ...
}

# add/remove methods for groups
...

}

我想检查用户是否对此组具有权限,并且我有一个操作,在此操作中,我正在执行以下操作:

public function __invoke(..){

# Getting parameters
..
$user_id = ..; # comes from middleware
$group_id = ..; # comes from parameter

$command = new TodoCreate(...);
$commandBus->dispatch($command);

..

}

认证将成为域关注的问题吗?它会进入处理程序本身吗?如果没有,为什么?

根据上述问题,我想知道您对以下方法(或以下方法之外的您的报价)是DDD中执行此方法的最佳方法的想法

  1. 在处理TodoCreateHandler之前先进行检查
  2. 在持久存储库之前检入TodoCreateHandler
  3. 其他(您提供的方式)

谢谢。

entity domain-driven-design cqrs
1个回答
0
投票

首先,我建议最好将Authentication和Authorization上下文与User上下文分开。我的意思是,您应该只保留个人信息或某些必要信息,直到您的域专家希望它们在用户模型中。之后,您应该将“身份验证和授权”移到一个独立的上下文中。实际上,身份验证和授权是支持子域。最后,您可以在授权上下文中提供一些服务,您的用户上下文可以调用它们。

[其次,我认为,在另一种情况下(在您的示例中为Todo),您应该在您的域中提供一些服务(如(ACL))以对用户进行身份验证,然后您可以以应用服务/用例的乞求来调用它们。

© www.soinside.com 2019 - 2024. All rights reserved.