Làm thế nào để gán quyền cho các vai trò theo chương trình?


26

Tôi có một số quyền mà tôi muốn gán cho một số vai trò theo chương trình để cài đặt dễ dàng hơn.

Vì tôi đang cài đặt mô-đun và tạo cả quyền và vai trò, tôi không có id vai trò, nơi tôi muốn đặt quyền. Cho đến nay tôi chỉ tìm được cách gán vai trò theo chương trình cần ID vai trò.

Tôi tự hỏi nếu bằng cách nào đó tôi có thể tìm kiếm các vai trò với tên (chuỗi) của họ, lấy ID vai trò và sau đó gán quyền. Nó chỉ không cảm thấy đúng.


Bảng cấp phép sử dụng ID vai trò, không phải tên vai trò. Bạn cần lấy ID vai trò, sau đó thêm quyền sử dụng ID đó. Bảng quyền sau đó cần chuỗi cho phép và tên của mô-đun triển khai nó (ít nhất là trên Drupal 7); Tôi không chắc chắn nếu tên mô-đun thực sự được sử dụng theo bất kỳ cách nào.
kiamlaluno

Có điều gì cụ thể mà bạn không hiểu về mã mà bạn nên sử dụng không? Bạn đã sử dụng mã nào? Hiển thị mã của bạn sẽ hữu ích; nó sẽ giúp ai trả lời để đề xuất những gì bạn cần làm (ví dụ: báo cáo những gì sai trong mã của bạn).
kiamlaluno

Cảm ơn câu trả lời. Tôi nghĩ rằng tôi phải tìm ID trong cơ sở dữ liệu. Nó không phải là khó khăn.
vogelsang

Câu trả lời:


1

Mô-đun tính năng thực hiện điều này khá độc đáo, cho phép bạn xuất các vai trò và quyền (và nhiều nội dung khác) trong một cú trượt:

http://drupal.org/project/features

Nhưng nếu bạn muốn tự mình kiểm tra API quyền:

http://drupal.org/project/permissions_api


2
Vấn đề là bạn không biết id vai trò khi bạn sử dụng các tính năng vì chúng được gán khi bạn cài đặt tính năng của mình. Do đó, bạn cần tìm ID bằng cách nào đó để gán quyền. Nó có lẽ chỉ là một tra cứu trong cơ sở dữ liệu.
vogelsang

24

Các tính năng là khá tiện dụng cho những thứ như thế này. Tuy nhiên, nếu bạn cần tạo vai trò và thêm quyền theo chương trình, bạn không phải tự mình đi tìm cơ sở dữ liệu.

Khi bạn tạo một vai trò người dùng mới user_role_save(), nó sẽ cập nhật đối tượng bạn đã truyền với id vai trò người dùng mới được gán. Bạn có thể thấy một ví dụ về điều này trong standard_install()chức năng trong hồ sơ cài đặt Tiêu chuẩn.

$admin_role = new stdClass();
$admin_role->name = 'administrator';
...
user_role_save($admin_role);
user_role_grant_permissions($admin_role->rid, array_keys(module_invoke_all('permission')));

Ví dụ này cho thấy rằng bạn có thể tạo một vai trò người dùng mới, sau đó truy cập vào thuộc tính của nó rid, được điền vào bởi user_role_save(). Nó cũng chỉ ra cách thêm quyền vào vai trò đó với user_role_grant_permissions(). Trong trường hợp này, nó cấp cho vai trò 'quản trị viên' tất cả các quyền có sẵn.

Nếu bạn cần lấy id của vai trò người dùng được tạo bởi người khác, bạn có thể sử dụng user_role_load_by_name()để lấy đối tượng cho vai trò người dùng đó. Sau đó, bạn chỉ cần lấy id với $role->rid.


2
Điều này rất tốt cho việc cấp / thu hồi nhiều quyền cùng một lúc: api.drupal.org/api/drupal/modules%21user%21user.module/feft/ Kẻ
Brian Wood


20

Tôi muốn thêm một ví dụ mã gần với câu hỏi ban đầu về cách gán quyền cho các vai trò hiện có theo chương trình.

Bạn có thể tra cứu các vai trò với tên của chúng, lấy ID vai trò và sau đó gán quyền như sau (ví dụ: trong triển khai hook_update):

function custommodule_update_7001() {
  $permissions = array('view my custom entity');
  foreach(array('anonymous user', 'authenticated user') as $role_name) {
    $role = user_role_load_by_name($role_name);
    user_role_grant_permissions($role->rid, $permissions);
  }
}
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.