Startup tasks run after Brix.get().init(config) and before presenters activate. Extend BrixStartupTask, implement run(), and call complete() when finished.
@BrixPresenter
public class AdminPresenter extends Presenter<AdminView> {
@Override
public Set<String> getRoles() {
return Set.of("admin");
}
@Override
public Authorizer getAuthorizer() {
return RolesAllowedAuthorizer.INSTANCE;
}
}
onComplete callback passed to start(...) fires.Bind tasks with the @BrixTask qualifier so you can inject the set into your entry point.
SecurityContext sc = (SecurityContext) Brix.get().getCoreComponent().core().getSecurityContext();
sc.setUser(new MyUser());
sc.setUnauthorizedAccessHandler(() -> window.alert("Access denied"));
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");
});
}
}
Annotate tasks with @AutoService(BrixStartupTask.class) to generate a BrixStartupTask_ServiceLoader helper. This lets you start Brix without wiring DI modules.
@BrixPresenter
@RolesAllowed({"admin", "support"})
public class AdminPresenter extends Presenter<AdminView> {
// getAuthorizer() and getRoles() are generated by the processor
}
complete() even for synchronous work.order() values for tasks that depend on earlier ones.getContextWait() if you need to coordinate multiple async operations inside one task.