Answers:
您需要安装Content Access模块才能添加此访问控制。
该模块允许您按角色和作者管理内容类型的权限。它允许您指定每种内容类型的自定义视图,编辑和删除权限。
对于drupal 7,请尝试使用hook_node_access():
/**
* Implements hook_node_access().
*/
function YOURMODULE_node_access($node, $op, $account) {
if (
$node->type == 'ebook' &&
$op == 'view' &&
!in_array('MonthlySubscriber', $account->roles)
) { return NODE_ACCESS_DENY; }
return NODE_ACCESS_IGNORE;
}
这是一种保护节点页面(节点/ NID)不受特权用户访问的简单方法。
/**
* Implements hook_menu_alter().
*/
function mymodule_menu_alter(&$items) {
$items['node/%node']['access callback'] = 'mymodule_check_node_access';
}
/**
* Determines whether the current user may perform the operation on the node.
*/
function mymodule_check_node_access($op, $node) {
if ($node->type == 'protected_type' && !user_access('administer site configuration')) {
return FALSE;
}
return node_access($op, $node);
}
hook_node_access
将不适用于“列出”节点的任何对象,例如视图。因此,您可以在中限制视图访问hook_node_access
,但是视图或自定义节点查询仍然可以向用户显示该节点。hook_node_access
对编辑控制,控制创建/更新/删除操作更有用
我使用了D7 API文档中的hook_node_access hook的代码段。
此代码将向具有“查看电子书”权限的用户授予查看“电子书”内容的访问权限。
您需要新的权限才能通过实现hook_permission()来控制访问。
/**
* Implements hook_permission().
*/
function mymodule_permission() {
return array(
'view ebook' => array(
'title' => t('View Ebook'),
'description' => t('View Ebook nodes.'),
),
);
}
通过实现hook_node_access(),Drupal可以授予或拒绝对该节点的访问。
/**
* Implements hook_node_access().
*/
function mymodule_node_access($node, $op, $account) {
// Checks for an ebook node in view mode.
if (is_object($node) && $node->type === 'ebook' && $op === 'view') {
// Grants permission to view the node if the current user has an role
// with the permission 'view ebook'.
if (user_access('view ebook')) {
return NODE_ACCESS_ALLOW;
}
// Otherwise disallows access to view the node.
return NODE_ACCESS_DENY;
}
// For all other nodes and other view modes, don't affect the access.
return NODE_ACCESS_IGNORE;
}
其他权限(编辑,删除等)可以通过正常的Drupal权限来处理。
(可选)您可以通过实现hook_query_TAG_NAME_alter从管理员概述中删除内容。
/**
* Implements hook_query_TAG_NAME_alter().
*/
function mymodule_query_node_admin_filter_alter(QueryAlterableInterface $query) {
if (!user_access('view ebook')) {
$query->condition('n.type', 'ebook', '!=');
}
}
我使用“ 节点视图权限”模块。它比“内容访问”模块简单。
与D6中一样,它向您选择的任何内容类型添加“查看任何内容”和“查看自己的内容”权限。
遵循的步骤:
/admin/config/content/node-view-permissions
并选择您要限制访问的内容类型。然后,转到/admin/people/permissions#module-node_view_permissions
并选择您希望能够查看内容的角色。保存权限。
做完了!