Brix includes a lightweight event bus. Extend BrixEvent for custom payloads, fire events globally, and handle them with @ListenFor on presenters.
@BrixPresenter
public class AdminPresenter extends Presenter<AdminView> {
@Override
public Set<String> getRoles() {
return Set.of("admin");
}
@Override
public Authorizer getAuthorizer() {
return RolesAllowedAuthorizer.INSTANCE;
}
}
SecurityContext sc = (SecurityContext) Brix.get().getCoreComponent().core().getSecurityContext();
sc.setUser(new MyUser());
sc.setUnauthorizedAccessHandler(() -> window.alert("Access denied"));
Presenters are registered as listeners on activation and removed on deactivation. Any component can register manually via Brix.get().events().register(...) and keep the returned RegistrationRecord to remove it.
Use HasContext<T> to broadcast store-like state changes with an operation flag. IsContext carries data, operation (CREATED, UPDATED, DELETED), and source.
public class DepartmentAuthorizer implements Authorizer {
@Override
public boolean isAuthorized(IsSecurityContext context, HasRoles hasRoles) {
return context.isAuthenticated()
&& context.getUser().getAttributes().get("department").ifTypeIs(String.class, dept -> {
return dept.equals("engineering");
});
}
}
Register context listeners to react to create/update/delete signals. Registration immediately replays the current context when present.
@BrixPresenter
@RolesAllowed({"admin", "support"})
public class AdminPresenter extends Presenter<AdminView> {
// getAuthorizer() and getRoles() are generated by the processor
}
events().fireEvent(source, event) to set the source for filtering.