Я новый разработчик, пытающийся заняться библиотекой Jackrabbit / JCR. Моя команда и я уже несколько месяцев используем EveryonePrincipal, но мы хотели реализовать больше возможностей для каждой роли / принципала пользователя, чтобы мы могли предоставить им необходимый доступ для чтения / записи для каждого узла. Тем не менее, у нас возникают некоторые трудности с выяснением того, как создать новый объект Principal.
Я использовал:
PrincipalImpl newPrincipal = new PrincipalImpl("MyPrincipal");
Затем создайте новый класс RolePrincipal, соответствующий EveryonePrincipal, за исключением того, что имя будет «MyPrincipal» внутри класса RolePrincipal. Этот метод не работает, к сожалению. Есть ли что-то еще, что мы упускаем из этого? И как сохраняется принцип «все»?
EveryonePrincipal.java
public final class EveryonePrincipal implements JackrabbitPrincipal, java.security.acl.Group {
public static final String NAME = "everyone";
private static final EveryonePrincipal INSTANCE = new EveryonePrincipal();
private EveryonePrincipal() { }
public static EveryonePrincipal getInstance() {
return INSTANCE;
}
//----------------------------------------------------------< Principal >---
@Override
public String getName() {
return NAME;
}
//--------------------------------------------------------------< Group >---
@Override
public boolean addMember(Principal user) {
return false;
}
@Override
public boolean removeMember(Principal user) {
throw new UnsupportedOperationException("Cannot remove a member from the everyone group.");
}
@Override
public boolean isMember(Principal member) {
return !member.equals(this);
}
@Override
public Enumeration<? extends Principal> members() {
throw new UnsupportedOperationException("Not implemented.");
}
//-------------------------------------------------------------< Object >---
@Override
public int hashCode() {
return NAME.hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
} else if (obj instanceof JackrabbitPrincipal && obj instanceof Group) {
JackrabbitPrincipal other = (JackrabbitPrincipal) obj;
return NAME.equals(other.getName());
}
return false;
}
@Override
public String toString() {
return NAME + " principal";
}
}