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}