2011-01-07

ZMI中使用portal_workflow管理工作流

在ZMI中,Plone使用protal_workflow来管理工作流。 点击plone下的portal_workflow,默认进入的Workflows标签页,这里设置各种对象和工作流的关联。这个其实是Plone控制面板里“类型”项目中修改当前工作流的后端界面。 可以看到,Document(Page)内容类型关联的是Default工作流,而在最后,Default工作流映射的是简单发布工作流(simple_publication_workflow),这是Plone的默认设置。在这里,可以修改它的名称从而映射到不同的工作流。可以在Contents标签页下查看所有的工作流名称。 但要注意的是,在更改工作流时,需要建立之前工作流的状态和新工作流状态的映射。ZMI中没有提供这个转换界面,这时只能通过Plone界面来进行工作流状态的映射了。 进入Plone控制面板->类型,这里可以为单个内容类型或者整个网站改变默认工作流。只要对象关联的工作流改变了,同时就要设置对已有文件从旧状态到新状态的映射。 回到ZMI。在Workflows标签页的底部,有一个"Update security settings"按钮,每当修改了安全配置时,都应该点击这个按钮来更新安全选项。 刚才说了,而在Contents标签页下可以查看所有的工作流。实际上,所有的工作流都在这里定义,在这里还可以增删工作流。点击某一个工作流就进入对应工作流的配置界面。 我们再回顾一下工作流的相关概念。 基于状态的工作流的主要概念有:
  • 状态
  • 转换
  • 角色
  • 权限
在Plone里还有其他的特性,比如审核列表,变量,转换前后的自定义脚本等。 工作流定义一个或多个逻辑状态,可以和特定的内容类型相关联。当创建一个文档的时候,它处于关联工作流定义的初始状态。这时,如果有合适的权限,可以点击一个状态转换,从而转换到另一个状态。在每个状态,用户都有不同的权限设置。换句话说,成员角色映射也是不同的。每个映射就像一个二维矩阵,为每个状态建立着从角色到权限的关系。 在Plone中定义的工作流,其ZMI界面中比较常用的标签有:
  • States
  • Transtions
  • Variables
  • Worklists
  • Scripts
  • Permissions
  • Groups
Permissions标签定义工作流管理哪些权限。 对于简单发布工作流来说,默认管理的权限有:
  • 访问内容信息(Access contents information)
  • 改变插件事件(Change portal events)
  • 列出文件夹内容(List folder contents)
  • 修改插件内容(Modify portal content)
  • 查看(View)
可以增删权限,注意这是通用权限。也可以针对具体状态查看对应的权限。点击States选择一个状态,然后选Permissions。这里可以为每个状态创建自定义的权限-角色映射。 通过这种方式,可以赋予或取消成员的权限,这都依据你对内容的安全设置。 例如,默认情况下,匿名用户可以看到已发布对象,但不能看到隐藏对象,管理员角色的用户可以编辑,而创建者却不能编辑。 甚至可以单独设置一块区域受保护,可以被特定的角色和权限用户查看,修改等。但是,要这样做的话,通过ZMI就不行了,要更底层的,写一些Python代码。 Worklists标签用来定义一个或多个审核链。默认有一个为待审状态而设的审核队列。 Scripts标签里可以设置包含Python脚本到工作流中,从而在状态改变前后可以执行。默认为空。 Variables标签可以增加变量包含到对象的工作流历史中,然后可以分类这些信息。比如,可以增加转换执行的时间或上次转换的评论作为变量。 Groups标签设置在工作流中如何管理组。特别地,可以为每一个逻辑状态创建一个组-角色映射图。 还有工作流中最重要的两项没有介绍:States和Transitions。 States定义和管理工作流中定义的所有状态。点击States标签可以看到当前工作流中定义的所有逻辑状态的列表。 其中Private状态有一个星花来标记。这里只能有一个状态带星花,因为这代表着Plone中对象的初始状态。这也就是为什么当创建一个新项目时,它是Private状态的。 每个状态都有一些转换可以使用。例如,在Private状态可以选择一个转换将项目改变到不同的逻辑状态上来。 这里可以创建新状态,也可重命名或修改现有状态。 点击某一个状态就进入它的配置界面。可以定义这个状态都有哪些迁移状态,可以配置用户访问许可。 假设点击进入了Private状态的配置,我们来看看通过配置界面可以做些什么。 要管理这个状态的许可设置,点击Permissions,可以自定义该状态下的许可-角色映射。 通过这个工具可以为每个角色赋予不同的权限。例如,对于匿名用户而言,在Private状态下,匿名用户毫无权限,所以他们不能查看一份private文档。拥有reader角色的用户阅读这个对象,当且仅当对象是private状态。如果有更高的权限,比如管理员角色,可以查看和修改这个对象。这样,通过用户的角色,同样的对象得到了不同的显示行为。 可以为每个状态修改权限设置,赋予或收回角色的权限。修改完毕以后,不要忘了点击“Update security settings”来更新工作流安全设置。 现在回到简单发布工作流的主配置界面,来看看转换是如何注册和配置的。点击"Transtition"标签,可以看到已注册的转换列表,还有一些其他的基本信息。 有这些转换:
  • Publish
  • Reject
  • Retract
  • Submit
对每一个转换,列表显示了其他的一些信息。这里最重要的是“Destination state”。目的状态定义转换后的状态。 在这个面板里也可以添加新的转换,可以从头新建一个转换或者看看别的转换是如何配置的。但要确定新转换的目的状态是存在的。 要改变某一个转换的设置,点击转换链接来打开配置面板。 在转换配置面板,有一个标题和一些描述文本,这有助于理解这个转换的种类。在"Destination state“下拉菜单里可以设置目的状态。 也可定义转换前后执行一段python脚本。 对于每一个转换,也可以配置如何触发:通过一个权限的满足,还是一个角色,一个组,或者一个內连python表达式。比如,Publish转换受“审查插件内容”权限的保护。可以用另一个Zope权限来改变这个设置,这样这个转换就只对允许的成员显示。 最后,在底部,有一个“Display in action box”区域,可以改变显示在状态菜单的文本。
blog comments powered by Disqus