尽管过滤器" type = cm:content",Alfresco审核也会写文件夹

时间:2017-03-16 04:37:02

标签: alfresco audit

我希望Alfresco审核文档更改,但不审核文件夹更改。例如,如果删除包含文档的文件夹,则只有文档删除才会显示在审核中。

在Alfresco 5.1.0中,我使用以下配置定义了一个审计应用程序myapp

audit.tagging.enabled=false
audit.myapp.enabled=true
audit.myapp.sub-actions.enabled=false
audit.filter.myapp.default.enabled=true
audit.filter.myapp.transaction.type=cm:content
audit.filter.myapp.transaction.path=/app:company_home/app:shared/.*
audit.filter.myapp.transaction.action=CREATE|READ|UPDATE CONTENT|CHECK IN|DELETE|COPY|MOVE|DOWNLOAD|addNodeAspect|deleteNodeAspect

如果我的理解是正确的,type=cm:content会将审核事件限制为仅限于Alfresco 文档的审核事件?如果我也想要关于文件夹的事件,我会在那里写cm:folder;cm:content

尽管有这段代码,但在查询http://localhost:8080/alfresco/service/api/audit/query/myapp时,无论何时创建或删除文件夹,我仍会收到审核事件。
我做错了什么?

创建文件夹后进行审核:

  {
     "id":945,
     "application":"myapp",
     "user":"user1",
     "time":"2017-03-16T13:20:59.480+09:00",
     "values":
     {
                 "\/bmyapp\/transaction\/action":"CREATE"
                 ,"\/myapp\/transaction\/path":"\/app:company_home\/app:shared\/cm:folder1"
     }
  },

删除文件夹后审核:

  {
     "id":947,
     "application":"myapp",
     "user":"user1",
     "time":"2017-03-16T13:24:51.098+09:00",
     "values":
     {
                 "\/myapp\/transaction\/action":"DELETE"
                 ,"\/myapp\/transaction\/path":"\/app:company_home\/app:shared\/cm:folder1"
     } 
  },

2 个答案:

答案 0 :(得分:1)

解决方案是在我的审计应用程序的XML定义文件中添加RecordValue key="type"元素,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Audit xmlns="http://www.alfresco.org/repo/audit/model/3.2"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.alfresco.org/repo/audit/model/3.2 alfresco-audit-3.2.xsd">
    ...
    <Application name="myapp" key="myapp">
        <AuditPath key="transaction">
            <RecordValue key="type" dataExtractor="simpleValue" dataSource="/myapp/transaction/type" dataTrigger="/myapp/transaction/type" />
            ...
        </AuditPath>
        ...
    </Application>
</Audit>

答案 1 :(得分:0)

如果您尝试过滤这样的审核数据,那么您的审核过滤错误! 实际上没有开箱即用的方法来过滤每个应用程序的审计数据,你只能在每个生产者的基础上做到这一点!我知道露天文档可能会有一些混乱,因为开箱即用的审计应用程序名称(alfresco-access)恰好与数据生成器的名称(alfresco-access)相同。

您实际可以做的是在过滤设置中使用alfresco-access(数据提供者),过滤将起作用:

audit.filter.alfresco-access.transaction.type=cm:content;~.*

请注意:但是,这将过滤掉来自数据生产者的所有审核事件(适用于所有审核应用程序)

我曾经实现了审计组件的扩展,使得可以根据与路径重写命名约定一起使用的DataExtractor过滤出审计应用程序级别的条目,所以如果你想要实现的,那么它这样做可能更好;或者编写自己的dataproducer来生成所需的数据,让一个审计应用程序使用过滤后的数据!