Alfresco自定义行动许可

时间:2015-09-08 10:18:47

标签: permissions action alfresco

我做了自定义操作。我可以在纪录片库中看到这个动作,但我可以在分面搜索结果页面上看到它。

 <action id="custom-action" type="javascript"  label="actions.custom.action">
        <param name="function">onCustomActionlick</param>
     </action>

所以我进入了aikau-1.0.8.1.jar\META-INF\js\aikau\1.0.8.1\alfresco\renderers\_ActionsMixin.js文件。

我看到我们做了一个测试,以确定此文件中是否允许操作:

if (this.filterActions === false || AlfArray.arrayContains(this.allowedActions, action.id))

在firebug上,我看到我的costum动作不在allowedActions对象中。我的问题是为什么?

我认为所有用户都可以使用未获得许可的操作。我对吗 ?

如何才能允许此操作并在分面搜索结果页面上显示?

提前谢谢你。

3 个答案:

答案 0 :(得分:3)

您需要编写一个扩展模块,如下所述:https://forums.alfresco.com/comment/159331#comment-159331

在JavaScript代码中,您需要获取 MERGED_ACTIONS 的小部件ID,并将customAction添加到allowdActions数组中,并在CustomActions中定义它。

这是来自链接的Aikau代码,可能已在更新的Alfresco版本中更新。因此,您需要在扩展模块中扩展它。 您可以在模块中使用 org \ alfresco \ share \ pages \ faceted-search 作为<sourcePackageRoot>

widgets: [{
    id: "MERGED_ACTIONS",
    name: "alfresco/renderers/Actions",
    config: {
        filterActions: true,
        mergeActions: true,
        allowedActions: ["folder-manage-rules", "folder-download", "folder-view-details", "CUSTOM3"],
        customActions: [{
            id: "CUSTOM3",
            label: "Custom Action 3",
            icon: "document-delete",
            index: "10",
            publishTopic: "DELETE_ACTION_TOPIC",
            type: "javascript"
        }],
        widgetsForActions: [{
            name: "alfresco/renderers/actions/ManageAspects"
        }]
    }
}]

答案 1 :(得分:3)

文档库(至少直到Alfresco Share 5.1)是使用YUI构建的,而搜索页面是使用Aikau构建的。在撰写本文时,搜索页面和文档库之间尚未进行动作处理,并且添加操作的过程也大不相同。

为了让您的自定义操作显示在分面搜索页面中,您需要执行以下操作:

  • 扩展搜索页面以更新&#34; alfresco / search / AlfSearchResult&#34; (它有id&#34; FCTSRCH_SEARCH_RESULT&#34;)将自定义操作添加到&#34; additionalDocumentAndFolderActions&#34;数组(见http://dev.alfresco.com/resource/docs/aikau-jsdoc/AlfSearchResult.html
  • 您的自定义操作将发布主题,因此您需要创建新服务以订阅该主题以执行操作。您需要进一步扩展分面搜索页面,以便您的服务包含在页面中。

答案 2 :(得分:1)

我从latest blog我们用过这个方法的方法中解释。

我们的用例是文档库视图中的现有操作,我们不希望重新创建,使用标准配置xml。

第一步是创建一个共享扩展模块,在web-extensions/site-data/extensions/example.xml中添加一个Javascript控制器:

<extension>
  <modules>
        <module>
            <id>Example Service</id>
            <version>1.0</version>
            <auto-deploy>true</auto-deploy>
            <customizations>
                <customization>
                    <targetPackageRoot>org.alfresco.share.pages.faceted-search</targetPackageRoot>
                    <sourcePackageRoot>com.parashift.example</sourcePackageRoot>
                </customization>
            </customizations>
        </module>
    </modules>
</extension>

这将加载一些额外的javascript,允许您调整小部件配置。

web-extension/site-webscripts/com/parashift/example/faceted-search.get.js中创建一个文件(或您在sourcePackageRoot中使用的任何包名称),添加一个名为faceted-search.get.js的文件,其中包含以下内容:

var searchResultPage = widgetUtils.findObject(model.jsonModel.widgets, "id", "FCTSRCH_SEARCH_RESULT");

if(searchResultPage != null) {
    searchResultPage.config = {
        enableContextMenu : false,
        mergeActions : true,
        additionalDocumentAndFolderActions : ["example-action"]
    }
}

model.jsonModel.widgets.push({
    id: "EXAMPLE_LISTENER",
    name: "parashift/action/example"
});

这将:

  • example-action添加到搜索结果中的操作列表中。这应该已经是某个share-config.xml文件中的已配置操作。
  • 添加一个新的侦听器小部件,供您在单击操作按钮时收听。

为您的侦听器窗口小部件添加文件:META-INF/parashift/action/example.js

define(["dojo/_base/declare",
        "dijit/_WidgetBase",
        "alfresco/core/Core"
    ],
    function(declare, _Widget, Core) {
        return declare([_Widget, Core], {

            postCreate: function () {
                this.alfSubscribe("ALF_SINGLE_DOCUMENT_ACTION_REQUEST", lang.hitch(this, this._onPayloadReceive));
            },

            _onPayloadReceive: function (payload) {

                if(payload.action.id == "example-action") {
                        this.alfLog("log", "Received action, handling accordingly");
                        ....... 
                }
            }

        });
});

此代码将侦听ALF_SINGLE_DOCUMENT_ACTION_REQUEST并执行_onPayloadReceive功能。在此函数中,我们过滤到example-action并执行任何自定义代码。

payload变量将包含documentaction个对象。使用Debug Logging可以看到它们的形状。

这大致相当于旧的YUI方法:

YAHOO.Bubbling.fire("registerAction", {
    actionName: "onExampleAction",
    fn: function(file) {
      console.log("Received action, handling accordingly");
      ....
    }
});