hi francisco

your observation was fully right. I have just tested it and now i am
able now to deal with users and permissions in the
dummy-locally-accessed repository i used to learn about access control
in JR. But now i am trying to extrapolate it to my previously working
repositories, which are accessed through Webdav and the class of the
obtained session object (Session session =
JcrUtils.getRepository("http://localhost:8080/server";)) is not a
JackrabbitSession class, but a SessionImpl class object (which did not
work in my previous tests).

Is there a way to get working access control  (as in my tests) when the
repository is obtained through Webdav?

unfortunately neither access-control nor user management is
available when using jcr-remoting via webdav.

sorry
angela

Thanks in advance for your attention!


2011/9/21 Angela Schreiber <[email protected] <mailto:[email protected]>>

    hi francisco

    it seems to me that the principal resolution doesn't work
    properly. that's why you get an access control exception
    upon editing ACLs and cannot login to the repo.

    i assume that you are using a default repository setup
    without specifying custom principal providers. is that
    correct?


        The object um is a UserManagerImpl object obtained through an
        admin session:
        new UserManagerImpl((SessionImpl) session, "admin")


    that's probably the culprit.

    you should use

    if (session instanceof JackrabbitSession) {
       UserManager umgr = ((JackrabbitSession) session).getUserManager();
    }

    instead of manually creating the user manager instance and
    relying on a specific implementation.

    the explanation was as simple as that:
    unless specified otherwise the DefaultSecurityManager builds a
    security setup that stores users in a separate workspace. all
    the depending modules (login, ac evaluation etc) then rely on
    that setup... however, if you create the user manager instance
    manually you simply store the users in the workspace of the
    editing session -> the user nodes exist but the principal
    provider (and the user-manager you would obtain from the
    session) look for them in a different place/workspace.

    if you wish to keep the users separate for each workspace instead
    of keeping them in a dedicated workspace you can use the alternative
    implementation (-> UserPerWorkspaceSecurityManage__r).
    but still you should refrain from creating the user manager instance
    manually and use the API instead.

    hope that helps
    angela


Reply via email to