开始
安装目录里必须要有一个config.php,这个文件我们称之为模块配置文件。
这个文件里的所有配置与模块紧密结合。没有它,便不能安装一个模块。
以下是一个详细的模块配置文件。
config.php return array( 'param'=>array( 'name' => '工作流', 'category' => '工作流', 'description' => '用于办理、设计与管理企业工作流程。', 'author' => 'banyan @ IBOS Team Inc', 'version' => '2.0', 'indexShow' => array( 'widget' => array( 'workflow/workflow' ), 'link' => 'workflow/list/index&op=category', ), ), 'config' => array( 'modules' => array( 'workflow/workflow' ), 'import' => array( 'application.modules.workflow.core.*', 'application.modules.workflow.controllers.*', 'application.modules.workflow.model.*', 'application.modules.workflow.utils.*', 'application.modules.workflow.widgets.*', ), 'components' => array( 'messages' => array( 'extensionPaths' => array( 'workflow' => 'application.modules.workflow.language' ) ) ), ), 'authorization' => array( 'use' => array( 'type' => 'node', 'name' => '工作流使用', 'group' => '使用', 'controllerMap' => array( 'list' => array( 'index', 'count' ), 'focus' => array( 'index' ), 'form' => array( 'index' ), 'new' => array( 'index', 'add' ), 'monitor' => array( 'index' ), 'preview' => array( 'getprcs', 'print', 'newpreview', 'flow', 'redo', 'sendremind' ), 'query' => array( 'index', 'advanced', 'search', 'add', 'searchresult', 'export' ) ) ), 'entrust' => array( 'type' => 'node', 'name' => '工作流委托', 'group' => '使用', 'controllerMap' => array( 'entrust' => array( 'index', 'add', 'status', 'del', 'confirmpost', 'confirm' ) ) ), 'destroy' => array( 'type' => 'node', 'name' => '工作流销毁', 'group' => '使用', 'controllerMap' => array( 'recycle' => array( 'index', 'restore', 'destroy' ) ) ), 'flow' => array( 'type' => 'node', 'name' => '流程管理', 'group' => '工作流设置', 'controllerMap' => array( 'type' => array( 'add', 'del', 'edit', 'export', 'freenew', 'getguide', 'import', 'index', 'trans', 'verify' ), 'timer' => array( 'index', 'save' ), 'querytpl' => array( 'index', 'add', 'del', 'edit' ), 'process' => array( 'index', 'getprocessinfo', 'getprocess', 'add', 'saveview', 'edit', 'del' ), 'manager' => array( 'index', 'add', 'edit', 'del' ), ) ), 'form' => array( 'type' => 'node', 'name' => '表单管理', 'group' => '工作流设置', 'controllerMap' => array( 'formtype' => array( 'index', 'add', 'edit', 'del', 'import', 'export', 'design', 'preview', ), 'formversion' => array( 'index', 'restore', 'del' ) ) ) ) );
如你所见,这是一个数组格式的配置文件,下面我们每个选项逐一讲解。
模块参数项
'param' => array( 'name' => '工作流', 'category' => '工作流', 'description' => '用于办理、设计与管理企业工作流程。', 'author' => 'banyan @ IBOS Team Inc', 'version' => '2.0', 'indexShow' => array( 'widget' => array( 'workflow/workflow' ), 'link' => 'workflow/list/index&op=category', ), ),
name 模块显示名字 ,必填字段
category 模块所属的分类,这个分类将会用在岗位管理里的权限设置上,这点很重要 (可选)
description 模块的描述,用在后台显示 ,必填字段
author 模块作者 (可选)
version 模块版本 (可选)
indexShow 办公首页配置,可配置多个 (可选)
widget 办公首页开启挂件 (可选)
link 首页图标链接 (可选)
模块配置项
'config' => array( 'modules' => array( 'workflow' => array( 'class' => 'application\modules\workflow\WorkflowModule' ) ), 'import' => array( 'application.modules.workflow.core.*', 'application.modules.workflow.controllers.*', 'application.modules.workflow.model.*', 'application.modules.workflow.utils.*', 'application.modules.workflow.widgets.*', ), 'components' => array( 'messages' => array( 'extensionPaths' => array( 'workflow' => 'application.modules.workflow.language' ) ) ), ),
modules 模块标识。对应的值 (e.g:workflow) 不仅在数据表中唯一,还是 访问URL 里的第一个参数,也是 Yii 里关于模块的识别符,每个模块都有一个xxModule.php,用来标识那个模块。
import 模块加载的路径,其值对应的路径将会在调用模块的文件时包含进来,从而实现自动加载。本例中,application是一个 Yii 内部定义的命名空间,在这里是指向system文件夹。如application.modules.workflow.core.*便是代表加载system/modules/workflow/core文件夹里的所有文件。注意:没有设置该路径却调用了该文件夹里的文件,会出错(新版本采用命名空间,已经不需要配置)
components 模块加载的组件。一般来说,我们无须另外写模块的组件,因为 IBOS 本身和Yii 已经提供了各方面功能强大的组件供调用。如果实在有必要,请参考Yii框架配置数组里的configure一节。事实上你会发现,这一段就是Yii框架配置数组里的configure一节。
本例中,加载的组件是Yii的 CPhpMessageSource,即语言组件,这样在模块内就可以调用模块自身的语言包
模块授权项
'authorization' => array( 'use' => array( 'type' => 'node', 'name' => '工作流使用', 'group' => '使用', 'controllerMap' => array( 'list' => array( 'index', 'count' ), 'focus' => array( 'index' ), 'form' => array( 'index' ), 'new' => array( 'index', 'add' ), 'monitor' => array( 'index' ), 'preview' => array( 'getprcs', 'print', 'newpreview', 'flow', 'redo', 'sendremind' ), 'query' => array( 'index', 'advanced', 'search', 'add', 'searchresult', 'export' ) ) ), // ...略 )
authorization 代表该模块的操作授权项。IBOS采用基于角色的授权访问控制,意味着任何用户(除超级管理员外)的所有操作都可以通过岗位(即角色)来进行控制。这里定义的便是该模块的所有操作项与信息。定义了该项后,编辑任何一个岗位,便会在权限设置里出现如图1的模块设置选项。
use 代表一个授权节点的英文标识,在一个模块的授权项内不能重复
type 授权类型,可以是node(普通节点)或data(数据节点,也称数据权限),如果类型为data,那么该节点的表现形式为略有不同,参见数据节点代码及效果图。
name 节点名称
group 该节点的所属分类
controllerMap 该节点的控制器映射数组(键为控制器名称,值为该控制器所有的公共方法)。
IBOS为了优化授权体验,将部分操作组成一个概念上的组,比如在本例中,一个列表(list)控制器,应该有index,count等操作,那么这个概念上的组就称为列表。列表不是一个实际上的操作,但它事实上却包含有两个操作,我赋值给你列表权限,你便拥有了index,count的操作权限。可以从图1看到,这样的赋值大大减少了一个个操作赋予权限的繁琐。
数据节点代码及效果图
'user' => array( 'type' => 'data', 'name' => '用户管理', 'group' => '组织架构', 'node' => array( 'view' => array( 'name' => '查看', 'controllerMap' => array( 'user' => array( 'index' ) ) ), 'manager' => array( 'name' => '管理', 'controllerMap' => array( 'user' => array( 'add', 'edit', 'del', 'isRegistered' ) ) ) ) ),