jmix-projects / jmix-ui

DEPRECATED. Use https://github.com/jmix-framework/jmix
https://www.jmix.io
3 stars 7 forks source link

io.jmix.ui.UiProperties#initialScreenId is not used and not working #700

Closed alexbudarov closed 2 years ago

alexbudarov commented 2 years ago

Jmix: 1.0.0.

I try to implement the same as described here, but for Jmix: https://www.jmix.io/cuba-platform/guides/anonymous-access-and-social-login

Project attached: jmix-pm-security-advanced.zip

jmix.ui.allowAnonymousAccess = true
jmix.ui.initialScreenId = MainScreen

Added this screen as allowed for the anonymous role.

Start server, open http://localhost:8080 in the browser.

Expected: main screen is opened. Actual: redirected to the login screen.

Also io.jmix.ui.UiProperties#getInitialScreenId() method isn't used anywhere.

Changes

To correctly work with anonymous user additionally to properties:

jmix.ui.allowAnonymousAccess = true
jmix.ui.initialScreenId = MainScreen

You must to create a role for the anonymous. For instance:

@ResourceRole(name = "Anonymous Access", code = AnonymousRole.CODE)
public interface AnonymousRole {

    String CODE = "anonymous-access";

    @ScreenPolicy(screenIds = {"MainScreen"})
    void screens();
}

And assign it in the DatabaseUserRepository:

@Primary
@Component("UserRepository")
public class DatabaseUserRepository extends AbstractDatabaseUserRepository<User> {

    // some methods

    @Override
    protected void initAnonymousUser(User anonymousUser) {
        Collection<GrantedAuthority> authorities = getGrantedAuthoritiesBuilder()
                .addResourceRole(AnonymousRole.CODE)
                .build();
        anonymousUser.setAuthorities(authorities);
    }
}

QA

Configure the anonymous access like described above. Open application in the browser, MainScreen should be opened instead of LoginScreen.

reznikova21 commented 2 years ago

1.2.0-SNAPSHOT - verified