gpt4 book ai didi

Java,设计模式:Manager for Use cases and Actors

转载 作者:太空宇宙 更新时间:2023-11-04 06:16:52 26 4
gpt4 key购买 nike

在一个项目中,我有 3 个参与者(用户、专家、管理员)和 5 个主要用例(CRUD:创建、读取、更新、删除和同步)。但用户对每个用例的访问权限与其他Actor不同。例如用户可以创建一个实体,但专家和管理员可以创建任意数量,依此类推其他用例:

enter image description here

此外,参与者使用相同的 UI。所以我必须决定在运行时启用或禁用针对当前参与者的操作。这似乎很容易做到,但我喜欢有一个良好的设计。特别是,用例的数量、参与者及其访问权限级别可能会在以后发生变化。所以我必须尊重 OCP 原则。但是我如何才能有一个好的设计来管理用例和参与者的访问权限级别?

最佳答案

Java 具有非常简单但强大的安全理念。主体(用户)拥有一些权限,而对象(实体)可能需要一些权限才能以某种方式进行处理。

import java.security.Permission;
import java.security.Permissions;
import java.security.SecurityPermission;

public class PermissionFactory {
public static Permission createOneEntity() {
return new SecurityPermission("entity.create.one");
}
public static Permission createManyEntities() {
return new SecurityPermission("entity.create.many");
}
public static Permission deleteEntity(Entity e) {
return new SecurityPermission("entity.delete." + entyty.getOwnerId());
}

public static Permission deleteMyEntity(User owner) {
return new SecurityPermission("entity.delete." + user.getId());
}
public static Permission deleteAnyEntity() {
return new SecurityPermission("entity.delete.*"); // * is a placeholder for 'any'
}
}

public class User {
private final Permissions permissions = new Permissions();

public void addPermission(Permission p) {
if(p != null) {
this.permissions.add(p);
}
}
public boolean hasPermission(Permission p){
return permissions.implies(p);
}
}

创建用户时,您可以存储他们的权限。

User admin = new User(); 
admin.addPermission(PermissionFactory.deleteAnyEntity());
User regular = new User();
regular.addPermission(PermissionFactory.deletyMyEntitiy(tregular);

最后,当您需要执行某些 protected 操作时,您可以询问委托(delegate)人是否有足够的权限来执行此操作。

Entity object = ...;
if(regular.hasPermission(PermissionFactory.deleteEntity(object)) {
delete object
}

如果您添加“操作”和“实体类型”的概念,则可以打开界面,然后在 PermissionFactory 中提供一些权限生成器接口(interface),而不是静态方法。但无论如何,安全模型和 OCP 是相互正交的。

关于Java,设计模式:Manager for Use cases and Actors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27996467/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com