EZ Publish/EZ Publish 策略功能
EZ Publish | EZ Publish安装与卸载 | EZ Publish的使用 | EZ Publish常见问题 | EZ Publish其他 |
策略功能简述[ ]
eZ Publish 内建的访问控制机制基于角色和策略。策略是一组授权访问模块的特定或全部函数的规则。
函数被指派到模块的视图,因而对视图的访问是由指派给它的函数控制的。
以下代码演示了在"kernel/notification/module.php"中如何指派"notification"模块的函数-视图。
<?php $Module = array( "name" => "eZNotification", "variable_params" => true ); $ViewList = array(); $ViewList["settings"] = array( "functions" => array( 'use' ), "script" => "settings.php", 'ui_context' => 'administration', "default_navigation_part" => 'ezmynavigationpart', "params" => array( ), 'unordered_params' => array( 'offset' => 'Offset' ) ); $ViewList["runfilter"] = array( "functions" => array( 'administrate' ), "script" => "runfilter.php", 'ui_context' => 'administration', "default_navigation_part" => 'ezsetupnavigationpart', "params" => array( ) ); $ViewList["addtonotification"] = array( "functions" => array( 'use' ), "script" => "addtonotification.php", 'ui_context' => 'administration', "default_navigation_part" => 'ezcontentnavigationpart', "params" => array( 'ContentNodeID' ) ); $FunctionList['use'] = array( ); $FunctionList['administrate'] = array( ); ?>
如上面代码所示,有两个函数被指派给三个函数。"administrate"函数被指派给"runfilter"视图,"use"函数被指派给"addtonotification"和"settings"视图。
多函数指派[ ]
一个视图可以有多个函数指派。从3.9.3 版本开始,系统在函数-视图指派中使用逻辑操作符("and","or")。下例演示了这个特性如何工作。
例1
"content"模块的"tipafriend"视图有两个函数指派。以下代码摘自"kernel/content/module.php"。
$ViewList['tipafriend'] = array( 'functions' => array( 'tipafriend', 'read' ), 'default_navigation_part' => 'ezcontentnavigationpart', 'script' => 'tipafriend.php', 'params' => array( 'NodeID' ) );
本例中的代码限定用户必须被同时授权访问"tipafriend"和"read"函数才能使用"tipafriend"视图("content"模块的一部分)。注意,有如下一种方法来指派同样的函数。
... 'functions' => array( 'tipafriend and read' ), ...
注意,"and"操作符也可以用"&&"代替。
例2
"section"模块的"list"视图有三个函数指派。下面的代码摘自"kernel/section/module.php"。
$ViewList['list'] = array( 'functions' => array( 'view or edit or assign' ), 'script' => 'list.php', 'default_navigation_part' => 'ezsetupnavigationpart', "unordered_params" => array( "offset" => "Offset" ), 'params' => array( ) );
上例的代码限定用户只要被授权访问"view","edit"或"assign"函数中的一个就可以使用"list"视图("section"模块的一部分)。注意,"or"操作符也可以用"||"来代替。
缺失函数[ ]
某些模块没有函数(如,"search"和"collaboration"模块)。这种情况下,授权访问这个模块意味着用户被授权访问这个模块的所有视图。
如果一个模块既有有函数指派的视图也有没有函数指派的视图,只有当用户被授权访问整个模块才可以访问那些没有函数指派的视图。
对早期版本的补充说明[ ]
在3.9.3 版本(除3.8.9 及以后的3.8.x 版本)以前版本中,授权用户访问模块的函数将会授权用户访问:
• 被指派该函数的视图
• 没有函数指派的视图
例如,在eZ Publish 3.9.2,"shop"模块的"discountgroupview"视图没有函数指派。可以访问"shop"模块的"buy"函数的匿名用户也可以访问"discountgroupview"视图(以及其它没有函数指派的视图)。基于安全考虑,这一特性在"3.10.0 beta1“,"3.9.3"和"3.8.9"版本中被修改。自定义的模块如果有函数不应该包含没有函数指派的视图。
函数限制[ ]
策略(授权访问模块的函数)可以通过函数限制被进一步限定。如果函数支持限定条件就可以做这种限定。函数可以支持0,1 或多个限定条件。下面的代码演示了如何 在"kernel/content/module.php"对"diff","hide"和"tipafriend"函数指定限定条件。
... $FunctionList['diff'] = array( 'Class' => $ClassID, 'Section' => $SectionID, 'Owner' => $Assigned, 'Node' => $Node, 'Subtree' => $Subtree); ... $FunctionList['hide'] = array( 'Subtree' => $Subtree ); ... $FunctionList['tipafriend'] = array(); ...
如上面的代码所示,"diff"函数支持五个限定条件,"hide"函数支持一个,"tipafriend"函数不支持限定条件。参考“EZ Publish访问控制”了解更多。