根据角色和用户ID限制Drupal内容表单中的Dropdown中的分类术语

时间:2014-01-22 15:57:19

标签: php drupal drupal-7 drupal-views

我正在尝试找到一种方法来限制出现在内容添加表单上的Drupal Taxonomy条款,这些条款基于其角色权限以及用户ID。我有一个名为Departments(IT,营销,会计等)的分类集。

在此特定内容添加表单上,有一个下拉列表,要求您分配内容所属的部门。如果角色设置为Admin,我希望它是完整的下拉列表,但如果它是普通用户,我希望它被默认或锁定到他们在用户配置文件中分配给他们的部门。

我环顾四周并在网上找到了多个建议,例如设置实体参考字段和使用分类法访问控制模块,但我似乎无法正确设置它。有什么建议吗?

谢谢!

1 个答案:

答案 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;

    }

}