Làm cách nào để tìm id vai trò từ tên vai trò?


17

Khi đăng nhập, tôi muốn kiểm tra nguồn dữ liệu của bên thứ ba (bảng trong db) cho người dùng và nếu tìm thấy tôi muốn thêm vai trò cho người dùng đó.

Tôi không muốn đoán loại bỏ vai trò, tôi muốn lấy nó từ tên vai trò.

Câu trả lời:


20

Điều này khá đơn giản với user_roles ()Array_search () . Dưới đây là một hàm sẽ trả về ID vai trò nếu có một vai trò khớp với tên và FALSE nếu không.

function get_role_by_name($name) {
  $roles = user_roles();
  return array_search($name, $roles);
}

// Sample usage
$rid = get_role_by_name('administrator');

Một lớp lót sẽ là:

$rid = array_search('administrator', user_roles());

1
Truy vấn được thực hiện bởi user_roles () được gắn thẻ có thể dịch , có nghĩa là một mô-đun có thể dịch tên vai trò. Drupal chỉ dịch tên vai trò cho các vai trò mặc định (nghĩa là người dùng ẩn danh và người dùng được xác thực).
kiamlaluno

32

Biết tên máy của vai trò, nó là đủ để sử dụng user_role_load_by_name().

if ($role = user_role_load_by_name('Role Name')) {
  // The role ID is in $role->rid.
}

Nếu Vai trò có thể không tồn tại ...

$role = user_role_load_by_name('Role Name');

$role_id = $role ? $role->rid : NULL;

3
Tôi rất thích cách tiếp cận này, cũng như cách tiếp cận khác, tên vai trò có thể được dịch. Trong thực tế, truy vấn được thực hiện bởi user_roles () được gắn thẻ có thể dịch . Drupal chỉ dịch tên cho các vai trò mặc định, nhưng một mô-đun cũng có thể dịch các tên vai trò khác.
kiamlaluno

4
$ Rid = ($ vai trò = user_role_load_by_name ())? $ vai trò-> thoát: NULL;
Pierre Buyle

-2

Cách tốt nhất để xác định vai trò và id của nó là từ SQL. Chạy truy vấn này trong trình soạn thảo SQL của bạn.

select * from roles;

Và bạn sẽ nhận được danh sách Vai trò bao gồm id và trọng lượng.


1
Cách tốt nhất là sử dụng API do Drupal cung cấp. Truy cập trực tiếp vào cơ sở dữ liệu, khi có API, không bao giờ là một ý tưởng hay, cũng không phải là cách tốt nhất.
kiamlaluno

Đây là một cách rất dễ dàng để có được các vai trò! Tôi không ngạc nhiên khi Cảnh sát trao đổi Drupal Stack đã bỏ phiếu cho một giải pháp đơn giản như vậy.
BlondeSwan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.