Drupal 设置在代码中创建节点的权限

Drupal 设置在代码中创建节点的权限,drupal,drupal-7,drupal-modules,Drupal,Drupal 7,Drupal Modules,我可以设置权限以允许经过身份验证的用户添加自定义类型的节点吗?我需要在我试图创建的模块中完成这项工作。正如我所看到的,hook\u权限实际上只是用于创建新权限。如果您的模块名是say mymodule,那么在hook\u权限中定义您的“创建节点”权限。然后实现hook\u node\u访问,以检查并返回您已实现的内容类型的权限 示例代码。 注意:它不能开箱即用,你必须替换你的模块名、权限名和内容类型名才能让它工作。别忘了清理缓存,两次!。 /** * Implements hook_permi

我可以设置权限以允许经过身份验证的用户添加自定义类型的节点吗?我需要在我试图创建的模块中完成这项工作。正如我所看到的,hook\u权限实际上只是用于创建新权限。

如果您的模块名是say mymodule,那么在hook\u权限中定义您的“创建节点”权限。然后实现hook\u node\u访问,以检查并返回您已实现的内容类型的权限

示例代码。 注意:它不能开箱即用,你必须替换你的模块名、权限名和内容类型名才能让它工作。别忘了清理缓存,两次!。
/**
 * Implements hook_permission().
 *
 */
function mymodule_permission() {
  // define your add permission.
  // Naming of "array key" is important. We use that later.
  return array(
    'YOUR CONTENT NAME: add' => array(
    'title' => t('Add Project Management Team'),
    ),
   );
}

/**
 * Implements hook_node_access().
 */
function mymodule_node_access($node, $op, $account = NULL) {
  $type = is_string($node) ? $node : $node->type;
  // make sure you are responding to content type defined by your module only.
  if ($type == 'YOUR_CONTENT_TYPE_NAME_HERE') {
    // If no account is specified, assume that the check is against the current logged in user
    if (is_null($account)) {
      global $user;
      $account = $user;
    }
    if ($op == 'create' AND user_access('YOUR CONTENT NAME: add', $account)) {
      return NODE_ACCESS_ALLOW;
    }
  }
  return NODE_ACCESS_IGNORE;
}
参考资料:


.

无需使用代码,只需转到“管理”->“人员”->“权限”,并在其中设置相应的权限,但如果我不想在激活模块时安装所有需要的设置,该怎么办?啊,很公平,你可以使用“也许我不明白,但不是用户ID的$account参数”吗?我需要使用匿名和经过身份验证的角色。传统上,在Drupal中,您需要创建一个权限,然后将其分配给您感兴趣的角色。然后在
hook\u node\u access()
中,您将使用
user\u access('custom permission',$account)
来确定节点/给定帐户的访问权限。您可以随时检查您感兴趣的角色的
$account->roles
,但这不是最佳做法