Drupal 7: 사용자 이름 파일을 기반으로 권한 할당

5475 단어 drupalphp
다음은 내가 만난 최근 시나리오입니다. 특정 사용자에게 Drupal 역할을 할당해야 합니다. 이 사이트는 로그인할 수 있는 사용자가 많은 SSO(Single Sign On) 시스템을 사용하고 있습니다. 하지만 그 중 일부만 특정 권한을 부여받아야 합니다. 특별 권한 역할에 액세스할 수 있는 사람의 목록은 자동으로 생성되어 각 계정 이름에 대해 한 줄씩 간단한 형식으로 매일 서버에 배치됩니다.

이 코드와 made it available on my GitHub의 일반 버전을 꺼냈습니다.

로그인 후 후크



먼저 로그인을 후킹해야 합니다. 사용자가 로그인할 때 추가 권한이 필요한지 확인하려고 합니다. 이것은 the hook_user_login hook 을 사용하여 수행할 수 있습니다.

/**
 * Implements hook_user_login
 */
function permissions_from_file_user_login(&$edit, $account) {

  // assign the "test role" role, if necessary.
  _permissions_from_file_update_permissions($account);

  // do not redirect password reset requests.
  if (!isset($_POST['form_id']) || $_POST['form_id'] != 'user_pass_reset') {
    if (isset($_GET['target'])) {
      drupal_goto($_GET['target']);
    }
  }
}


파일 읽기



다음으로 사용자 이름이 파일에 있는지 확인하는 또 다른 함수가 있습니다.

/**
* Reads from file and determine whether the specified user is in the list
**/
function _permissions_from_file_is_role($account) {
  $contents = file_get_contents('/var/usernames/roleusernames.csv');
  return preg_match("/$account->name/",$contents); 
  // returns if name is in the file.
}


역할 할당 또는 제거



마지막으로 사용자 이름이 파일에 있는지 여부에 따라 권한을 할당할 수 있습니다.

/**
* Calls function that checks if permissions should be found
**/
function _permissions_from_file_update_permissions($account) {
  $is_role = _permissions_from_file_is_role($account);
  $role = user_role_load_by_name('test role');
  if ($is_role) {
    // add permissions to that user
    user_multiple_role_edit(array($account->uid), 'add_role', $role->rid);
  }
  else {
    // delete the role assignment, if it exists
    user_multiple_role_edit(array($account->uid), 'remove_role', $role->rid);
  }
}

좋은 웹페이지 즐겨찾기