使用drupal模块更改节点访问权限

时间:2010-07-05 17:00:07

标签: drupal hook readonly

我运行drupal 6并想要编写此功能: 在用户填写公式后,他可以点击一个额外的按钮,这将使他的表格只读。

我想到了一个hidden_​​field和一个额外的按钮,在用户点击额外按钮后,将hidden_​​field设置为true状态。当我加载节点并且hidden_​​field具有真实状态时,我想将节点中的所有字段设置为只读。 (hook_access,node_access?!?)

嗯..希望这一切都不会太混乱(因为即使我现在有点困惑......)

1 个答案:

答案 0 :(得分:3)

首先,您将无法阻止有权访问数据库的用户或root用户查看数据(至少没有加密)。

就正常的网站运营而言,这并不难。你需要调用的两个钩子是hook_node_grants()hook_node_access_records(),这是一个很好的例子,它在问题here中几乎可以做你想要的。

简单地说,hook_node_access_records()返回一个详细说明可以对其执行操作的relms和id的结构,hook_node_grants()返回用户的relms和id。如果两者之间存在匹配,则授予访问(读取或写入)。

这为您提供了很大的灵活性。一个例子是人们只能读取由具有相同星座的其他人创建的节点。在hook_node_grants中,您将检查用户对象以获取starsign并返回$grants['starsign'] = 2

当节点被保存时,hook_node_access_records必须检查创建它的用户的星座符号:

 $grants = array();
 $grants[] = array(
  'realm' => 'starsign',
  'gid' => $account->starsign,
  'grant_view' => 1,
  'grant_update' => 0,
  'grant_delete' => 0,
  'priority' => 0,
);
return $grants

这样,如果relm和group id匹配,则用户将获得读访问权。