我正在尝试找到一种方法来限制出现在内容添加表单上的Drupal Taxonomy条款,这些条款基于其角色权限以及用户ID。我有一个名为Departments(IT,营销,会计等)的分类集。
在此特定内容添加表单上,有一个下拉列表,要求您分配内容所属的部门。如果角色设置为Admin,我希望它是完整的下拉列表,但如果它是普通用户,我希望它被默认或锁定到他们在用户配置文件中分配给他们的部门。
我环顾四周并在网上找到了多个建议,例如设置实体参考字段和使用分类法访问控制模块,但我似乎无法正确设置它。有什么建议吗?
谢谢!
答案 0 :(得分:2)
我认为实现这一目标的最简单方法是在自定义模块中使用一些代码。
首先,我将使用hook_permisision创建一个名为manual_set_department的新权限。
最好检查权限而不是角色可以更改角色,并且一旦设置了权限就更灵活,因为您可以根据需要将其应用到其他角色。
要做到这一点,请使用:
function MY_MODULE_permission() {
return array(
'manually_set_department' => array(
'title' => t('Manually set department'),
'description' => t('Allows users to manually set their department'),
),
);
}
现在,如果用户没有上述权限,我们需要减少部门列表。为此,我们可以使用hook_form_alter。在这个例子中,我假设您的内容类型被称为页面:
function MY_MODULE_form_alter(&$form, &$form_state, $form_id) {
drupal_set_message("Form ID is : " . $form_id);
switch($form_id) {
case 'page_node_form':
// dpm($form); // dpm (supplied by the devel module) is always useful for inspecting arrays
if(!user_access('manually_set_department')) { // check the permission we created earlier
global $user;
$account = user_load($user->uid); // load the users account
//dpm($account);
$deparment_tid = $account->field_department[LANGUAGE_NONE][0]['tid']; // get their department tid
foreach($form['field_department'][LANGUAGE_NONE]['#options'] as $k => $v) {
if($k != $deparment_tid) unset($form['field_department'][LANGUAGE_NONE]['#options'][$k]); // unset any but their own departments
}
}
break;
}
}