我运行drupal 6并想要编写此功能: 在用户填写公式后,他可以点击一个额外的按钮,这将使他的表格只读。
我想到了一个hidden_field和一个额外的按钮,在用户点击额外按钮后,将hidden_field设置为true状态。当我加载节点并且hidden_field具有真实状态时,我想将节点中的所有字段设置为只读。 (hook_access,node_access?!?)
嗯..希望这一切都不会太混乱(因为即使我现在有点困惑......)答案 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匹配,则用户将获得读访问权。