001package jmri.jmrit.permission; 002 003import java.util.*; 004 005import jmri.*; 006 007/** 008 * A role in the permission system. 009 * 010 * @author Daniel Bergqvist (C) 2024 011 */ 012public class DefaultRole implements Role { 013 014 public static final Role ROLE_GUEST = 015 new DefaultRole(Bundle.getMessage("Role_Guest"),50,"GUEST"); 016 017 public static final Role ROLE_STANDARD_USER = 018 new DefaultRole(Bundle.getMessage("Role_StandardUser"),10,"STANDARD_USER"); 019 020 public static final Role ROLE_ADMIN = 021 new DefaultRole(Bundle.getMessage("Role_Admin"),100,"ADMIN"); 022 023 private final String _name; 024 private final boolean _systemRole; 025 private final int _priority; 026 private final String _systemName; 027 028 private final Map<Permission, Boolean> _permissions = new TreeMap<>((a,b) -> {return a.getName().compareTo(b.getName());}); 029 030 public DefaultRole(String name) { 031 this._name = name; 032 this._priority = 0; 033 this._systemRole = false; 034 this._systemName = null; 035 } 036 037 public DefaultRole(String name, int priority, String systemName) { 038 this._name = name; 039 this._priority = priority; 040 this._systemRole = priority != 0; 041 this._systemName = systemName; 042 } 043 044 @Override 045 public String getName() { 046 return this._name; 047 } 048 049 @Override 050 public boolean isSystemRole() { 051 return this._systemRole; 052 } 053 054 @Override 055 public int getPriority() { 056 return this._priority; 057 } 058 059 @Override 060 public String getSystemName() { 061 return this._systemName; 062 } 063 064 @Override 065 public Map<Permission,Boolean> getPermissions() { 066 return Collections.unmodifiableMap(_permissions); 067 } 068 069 @Override 070 public boolean hasPermission(Permission permission) { 071 return _permissions.getOrDefault(permission, false); 072 } 073 074 @Override 075 public void setPermission(Permission permission, boolean enable) { 076 if (! InstanceManager.getDefault(PermissionManager.class) 077 .checkPermission(PermissionsSystemAdmin.PERMISSION_EDIT_PERMISSIONS)) { 078 return; 079 } 080 _permissions.put(permission, enable); 081 } 082 083 void setPermissionWithoutCheck(Permission permission, boolean enable) { 084 _permissions.put(permission, enable); 085 } 086 087 @Override 088 public boolean isGuestRole() { 089 return this == ROLE_GUEST; 090 } 091 092 @Override 093 public boolean isStandardUserRole() { 094 return this == ROLE_STANDARD_USER; 095 } 096 097 @Override 098 public boolean isAdminRole() { 099 return this == ROLE_ADMIN; 100 } 101 102}