hi francisco

On 9/29/11 12:33 PM, Francisco Carriedo Scher wrote:
Hi Angela,

then, taking into account the other options (please tell me if i am
wrong) if i obtain the repository object through:

- Webdav: user management and access control is not available.
- RMI: user management and access control is not available either.
- JNDI: idem as the same point (since the repository object is located
through JNDI tree but it is finally remotely operated using RMI, isn't it?)

I have checked the JIRA for Jackrabbit (until 2008) and i did not find
any attemp to implement access control nor user management through RMI
nor Webdav. Anyway i found "RFC 3744 (Access Control Protocol)" support
mention inside README file in the jackrabbit-webdav project. Would this
last option fit my purposes?

the issue related to access control and jcr-remoting is
https://issues.apache.org/jira/browse/JCR-2113

the RFC 3733 referred to in the webdav-library means that
the library provides some initial utilities, dav properties,
methods etc. that would be suited to implement the rfc in
any of the server implementations present. up to now this didn't
get enough priority, i regret so say.

Finally, right now i consider the following alternatives:

- extending JR remoting through RMI or Webdav to support UM and AC. I
would like to contribute back to JR project but i am not sure if i am
the appropiate one to implement such extension.

why not. give it a try...
the dev list would be the right place for discussions and providing
patches is always welcome.

the implementation in jackrabbit-jcr-server specifically for
the server that is intended to expose jcr api via http, should
rather straight forward at least as far as the basic jcr ac
functionality is concerned... i don't remember the very details of
rfc 3733 but it could give some ideas on how to start.

regards
angela


- wrap the UM and AC with webservices but, would that mean performing
all the operations through WS? Let me explain: since the UM and AC
operations require the repository to be started locally, my doubt is:
would work enabling the desired modules (jackrabbit-webdav for Webdav or
jackrabbit-jcr-rmi for RMI) to have AC and UM working through WS and
other functionalities through Webdav / RMI?

Thank you very much for your attention, it helps a lot!




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

    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
        <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]> <mailto:[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