Ajouter des rôles dynamiquement - codjo/codjo-security GitHub Wiki
Cette page décrit comment ajouter des rôles dynamiquement à l'ouverture de la session d'un utilisateur.
Pour ajouter des rôles à un utilisateur. Il faut :
- Définir un nouveau SecurityContext
- Définir un nouveau SecurityContextFactory
- Déclarer ce nouveau mechanisme au plugin SecurityServerPlugin.
Etape de configuration
- Création du SecurityContext
public class GabiSecurityContext implements SecurityContext {
private final SecurityContext securityContext;
private final List<String> specificRoleNames;
public GabiSecurityContext(SecurityContext securityContext, List<String> specificRoleNames) {
this.securityContext = securityContext;
this.specificRoleNames = specificRoleNames;
}
public boolean isCallerInRole(String roleId) {
return securityContext.isCallerInRole(roleId)
|| specificRoleNames.contains(roleId);
}
}
- Création du SecurityContextFactory
public class GabiSecurityContextFactory implements SecurityContextFactory {
private final SecurityContextFactory factory;
public GabiSecurityContextFactory(SecurityContextFactory factory) {
this.factory = factory;
}
public SecurityContext createSecurityContext(UserId id, Connection connection)
throws SQLException {
return new GabiSecurityContext(factory.createSecurityContext(id, connection),
getSpecificRoles(id, connection));
}
private List<String> getSpecificRoles(UserId id, Connection connection)
throws SQLException { ... }
}
- Declaration
SecurityServerPlugin security = ...;
SecurityContextFactory factory = security.getConfiguration().getSecurityContextFactory();
security.getConfiguration().setSecurityContextFactory(new GabiSecurityContextFactory(factory));
{rate}