Настройте несколько ролей с одинаковыми разрешениями - PullRequest
0 голосов
/ 07 ноября 2011

У меня довольно большой сайт с более чем 20 ролями и разрешениями. Тем не менее, это всегда одни и те же разрешения, но в зависимости от того, кто создал контент, разрешения различаются ...

Итак, что я сейчас делаю, это:

    // Make the new role
    $role = new stdClass;
    $role->name = 'Redacteur 1';
    $role->weight = 3;
    user_role_save($role);

    // Permissions to assign to the role.
    // Note these are defined in hook_permission()
    $perms = array(
    'access content','access content overview'
    );

    // Grant the permissions. This function takes care of all necessary cache resets
    user_role_grant_permissions($role->rid, $perms);

    // Make the new role
    $role = new stdClass;
    $role->name = 'Redacteur 2';
    $role->weight = 3;
    user_role_save($role);

    // Permissions to assign to the role.
    // Note these are defined in hook_permission()
    $perms = array(
    'access content','access content overview'
    );

    // Grant the permissions. This function takes care of all necessary cache resets
    user_role_grant_permissions($role->rid, $perms);

Нет ли способа сделать это с каким-нибудь массивом, поэтому я не получаю 1000 строк кода. Когда вы хотите что-то изменить в разрешениях, вам нужно пересмотреть все роли ... Это должно быть проще сделать. Любой совет?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2011

Я написал функцию по умолчанию для достижения этой цели:

function _load_permission_settings($role_index = null) {
    // Blocks
    $perms['administer blocks'] =           array(0, 0, 0);
    // Comments
    $perms['administer comments'] =         array(0, 1, 0);
    $perms['access comments'] =             array(1, 1, 1);
    $perms['post comments'] =               array(1, 1, 1);
    $perms['skip comment approval'] =       array(1, 1, 1);
    $perms['edit own comments'] =           array(1, 1, 1);
        ...


function _create_users() {
    require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');

    $roles = user_roles(true);

    $users[] = array('an', array(3));
    $users[] = array('ben', array(4, 6, 8));
    ...

function _set_roles_and_permissions() {
    // Enable default permissions for system roles.
    user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access content'));
    user_role_grant_permissions(DRUPAL_AUTHENTICATED_RID, _load_permission_settings(0));

    // Permissions to assign to the roles. (all Thema-related roles share the same permissions)
    $perms_eind = _load_permission_settings(1);
    $perms_red = _load_permission_settings(2);

    $user_roles = _load_thema_user_role_names('');
    foreach ($user_roles as $name) {
        // Role1
            $role = new stdClass;
        $role->name = 'Role 1 - ' . $name;
        user_role_save($role);
        user_role_grant_permissions($role->rid, $perms_eind);
        // Role2
        $role = new stdClass;
        $role->name = 'Role 2 - ' . $name;
        user_role_save($role);
        user_role_grant_permissions($role->rid, $perms_red);
    }
}
0 голосов
/ 09 ноября 2011

Вы можете изменить поля в базе данных.Я хотел бы помочь вам больше, но я сделал только незначительные корректировки.

...