Alfresco:查询特定用户可读的文档

时间:2014-05-12 10:43:59

标签: alfresco

我需要获取特定用户可读的所有文档。假设表演者用户为admin,是否可以使用“标准”查询或某种解决方法?

作为一个例子,要清楚,说存储库中只有两个文档,只有两个用户(admin旁边)。 ACL就是这样的:

    \  Mike | Bob
doc1 | rw   | r
doc2 | r    | -

我想以admin执行查询以获取Bob可读的所有文档,因此我希望只有doc1作为结果。

由于

2 个答案:

答案 0 :(得分:2)

如果不遍历整个搜索结果集并检查每个结果的权限,我认为这是不可能的。

正如其他人所说,如果您以用户而非管理员的身份进行搜索,您只会获得允许用户查看的结果。

我认为作为管理员,您可以作为用户进行搜索并查看返回的内容,但如果您有多个用户,如您的示例中所示,这将变得乏味。

答案 1 :(得分:1)

唯一可能的是编写一些Java代码来与另一个runas用户执行查询。

这是一个可用的Java代码,它扩展了默认的Alfresco webscript行为,您可以在其中提交runas参数。如果您创建Java后端Webscript并实现runas函数并执行 SearchService.query ,那么您就可以了。

@Override
    protected void transactionedExecute(final WebScript script,
            final WebScriptRequest scriptReq, final WebScriptResponse scriptRes)
            throws IOException
    {
        //already authenticated here
        //already pass the authentication
        //get the runAs Parameter
        String runAs = scriptReq.getParameter(runAsParamName);

        final String fixCurrentAuthenticatedUser = authenticationService.getCurrentUserName();
        RetryingTransactionCallback<Boolean> exampleWork = new RetryingTransactionCallback<Boolean>()
        {
            public Boolean execute() throws Exception
            {
                return authorityService.isAdminAuthority(fixCurrentAuthenticatedUser);
            }
        };

        boolean isAdmin = retryingTransactionHelper.doInTransaction(exampleWork);


        //only admins are allowed to do that
        if ( !isAdmin || runAs == null || runAs == "")
        {
             //ignore runAs
             super.transactionedExecute(script, scriptReq, scriptRes);
             return;
        }
        final RunAsRepositoryContainer thisIsThis = this;
        RunAsWork<Object> work = new RunAsWork<Object>()
        {
            public Object doWork() throws Exception
            {
                super.transactionedExecute(script, scriptReq, scriptRes);
                return null;
            }
        };
        AuthenticationUtil.runAs(work, runAs);
   }