【问题标题】:Limiting Taxonomy Terms in Dropdowns in Drupal content forms based on roles and user id基于角色和用户 ID 限制 Drupal 内容表单下拉列表中的分类术语
【发布时间】:2014-01-22 15:57:18
【问题描述】:

我正在尝试找到一种方法来限制出现在内容添加表单上的 Drupal 分类术语,基于他们的角色权限以及他们的用户 ID。我有一个分类集,称为部门(IT、营销、会计等)。

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

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

谢谢!

【问题讨论】:

    标签: php drupal drupal-7 drupal-views


    【解决方案1】:

    我认为实现这一点的最简单方法是在自定义模块中添加一些代码。

    首先我会使用 hook_permision 创建一个名为 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;
    
        }
    
    }
    

    【讨论】:

    • 这是一个有趣的方法。我会试一试,让你知道结果.. 我猜一旦模块启用并且你设置了权限,它应该只是从下拉框中删除所有其他选项吗?
    猜你喜欢
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多