Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 对象模型授权-面向对象设计问题_Design Patterns_Oop_Domain Driven Design - Fatal编程技术网

Design patterns 对象模型授权-面向对象设计问题

Design patterns 对象模型授权-面向对象设计问题,design-patterns,oop,domain-driven-design,Design Patterns,Oop,Domain Driven Design,背景 每个项目都有一个与其关联的帐户。每个用户都可以拥有访问多个帐户的权限。这反过来意味着每个用户只能基于用户的帐户权限访问项目的子集 当用户登录到应用程序时,将加载用户对象,此时也将加载帐户权限。该用户对象存储在应用程序的缓存中。根据需要加载项目 问题 实施帐户限制的最佳方式是什么?我们希望将其从实际的表示逻辑中抽象出来,但我们认为将授权逻辑放在项目对象中并不一定是一种好方法,因为这样它就取决于用户对象。你们觉得怎么样 示例:(aspx页面代码隐藏) 然后将用户对象也抽象出来。将用户对象转换为

背景 每个项目都有一个与其关联的帐户。每个用户都可以拥有访问多个帐户的权限。这反过来意味着每个用户只能基于用户的帐户权限访问项目的子集

当用户登录到应用程序时,将加载用户对象,此时也将加载帐户权限。该用户对象存储在应用程序的缓存中。根据需要加载项目

问题 实施帐户限制的最佳方式是什么?我们希望将其从实际的表示逻辑中抽象出来,但我们认为将授权逻辑放在项目对象中并不一定是一种好方法,因为这样它就取决于用户对象。你们觉得怎么样

示例:(aspx页面代码隐藏)


然后将用户对象也抽象出来。将用户对象转换为一组权限,您可以使用标准界面从项目中查询这些权限。

您可以实现一个类,负责验证项目的权限(即,权限检查逻辑是否存在于项目之外);e、 g.在爪哇:

public interface EntitlementsManager {
   void checkProjectPermission(String userName, int projectId) throws SecurityException;
}

然后在代码中,您只需在业务层添加对checkProjectPermission的调用,然后再将结果传递回表示层。虽然这是一种相当程序化(即非OO)的方法,但很明显,因为所有基于权限的逻辑都在一个类中。基于异常的方法也意味着代码中的if-then语句更少。

那么我会通过用户对象的接口间接地将用户对象传递到项目对象中吗。在该解决方案中,您将无法回避项目和用户知道该接口的事实,但项目不需要知道它是否正在与用户或TestHarness等进行对话。如果有多个页面加载项目,并且在一个页面中用户应被授权加载项目,该怎么办,但是在另一种情况下,用户不应该被授权加载项目?
public interface EntitlementsManager {
   void checkProjectPermission(String userName, int projectId) throws SecurityException;
}