Javaでロールベースのアクセス制御を実装する方法
Javaでは役割-ユーザー-権限のモデルを用いることで役割・ユーザー・権限を実現できる。
最初に、ロールクラス(Role)、ユーザー(User)、パーミッション(Permission)を定義します。
役割(Role)は、特定の役割を表し、複数の権限を含めることができます。
ユーザークラス(User)は具体的なユーザーを表しており、複数のロールに属することができます。
パーミッション(Permission)は、具体的な権限を表す。
ユーザーモデルにそのユーザーの所属するロールのリストを持つ属性を追加します。
ロールとして権限リストの属性を追加して、そのロールに付与された権限を表す。
ユーザクラスにユーザが持つ権限かどうかを判定する方法を追加し、その際にユーザの持つロール一覧を走査し、そのロールが権限を持っているかどうかを判定します。
サンプルコードを以下に示します。
import java.util.ArrayList;
import java.util.List;
class Role {
private String name;
private List<Permission> permissions;
public Role(String name) {
this.name = name;
this.permissions = new ArrayList<>();
}
public void addPermission(Permission permission) {
permissions.add(permission);
}
public boolean hasPermission(Permission permission) {
return permissions.contains(permission);
}
}
class User {
private String name;
private List<Role> roles;
public User(String name) {
this.name = name;
this.roles = new ArrayList<>();
}
public void addRole(Role role) {
roles.add(role);
}
public boolean hasPermission(Permission permission) {
for (Role role : roles) {
if (role.hasPermission(permission)) {
return true;
}
}
return false;
}
}
class Permission {
private String name;
public Permission(String name) {
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
// 创建角色和权限
Role role1 = new Role("Role1");
Permission permission1 = new Permission("Permission1");
role1.addPermission(permission1);
Role role2 = new Role("Role2");
Permission permission2 = new Permission("Permission2");
role2.addPermission(permission2);
// 创建用户,并添加角色
User user = new User("User1");
user.addRole(role1);
user.addRole(role2);
// 判断用户是否具有某权限
System.out.println(user.hasPermission(permission1)); // 输出:true
System.out.println(user.hasPermission(permission2)); // 输出:true
}
}
上記のコード例では、ロールと権限を作成し、ロールをユーザーに追加し、ユーザーがある権限を持っているかどうかを判定できます。