Câu trả lời:
Miễn là mọi mô-đun có thể xác định các quyền của riêng mình, không có danh sách "nghiêm ngặt" nào của chuỗi đó. Bạn sẽ cần phải "xây dựng" nó nếu bạn thực sự cần phải có một danh sách như vậy theo chương trình.
Bạn có thể chạy tập lệnh này trong trang / devel / php. (Tất nhiên, bạn cần mô-đun Devel .)
// Render role/permission overview:
$options = array();
foreach (module_list(FALSE, FALSE, TRUE) as $module) {
print_r($module);
// Drupal 6
// if ($permissions = module_invoke($module, 'perm')) {
// print_r($permissions);
// }
// Drupal 7
if ($permissions = module_invoke($module, 'permission')) {
print_r($permissions);
}
}
Như @Berdir đã nói, cách dễ nhất để xem các quyền nào khả dụng là truy cập quyền quản trị / người / quyền trong Drupal 7.
Vấn đề tôi tiếp tục gặp phải là tôi không bao giờ có thể tìm ra chuỗi nào tôi cần cung cấp như một 'đối số truy cập' để thực sự sử dụng quyền. Chà, đây là cách bạn tìm tên chuỗi cho các quyền bạn muốn sử dụng (Ví dụ này sử dụng Google Chrome.)
Bước một. Đi tới quản trị viên / người / quyền tìm quyền bạn muốn sử dụng và nhấp chuột phải vào hộp kiểm ở bên phải quyền bạn muốn sử dụng. Chọn 'Kiểm tra phần tử' hoặc chỉ cần nhìn vào nguồn.
Tiếp theo tìm giá trị của hộp kiểm và lưu ý giá trị. (Trong trường hợp này, chuỗi là 'tạo nội dung phiếu giảm giá')
Đây là chuỗi bạn cần cung cấp làm đối số truy cập trong hook_menu ()
Mã ví dụ: (các mục không liên quan bị xóa, đừng quên tiêu đề, gọi lại, v.v. trong hook_menu ())
function fsrsys_menu() {
$items = array();
$items['my-custom-url'] = array(
'access callback' => 'user_access',
'access arguments' => array('create coupon content'),
);
return $items;
}
Đây là phiên bản D7 của câu trả lời của Haza, được sửa đổi để sử dụng DSM thay vì print_r và loại bỏ các mô-đun không triển khai hook_ allow:
// Render permission overview:
$options = array();
foreach (module_list(FALSE, FALSE, TRUE) as $module) {
if ($permissions = module_invoke($module, 'permission')) {
// List only the modules that have permissions.
dsm($module);
dsm($permissions);
}
}
Bạn có thể sử dụng user_permission_get_modules()
hàm, trả về một mảng của tất cả các quyền được xác định và các mô-đun của chúng.
Xác định các mô-đun mà quyền thuộc về.
Giá trị trả về
Một mảng kết hợp trong định dạng $ allow => $ module.
Cách dễ nhất là kiểm tra trang quyền (D7: admin / people / allow, D6: admin / user / allow). Lưu ý rằng bạn trực tiếp sử dụng chuỗi được hiển thị trong Drupal 6, vì 7 bạn cần xem tên / giá trị của hộp kiểm. Điều này là do các quyền hiện có tiêu đề và mô tả được dịch trong Drupal 7.
Vì vậy, nếu bạn muốn tên cho quyền "Xem nội dung được xuất bản" trong Drupal 7, giá trị là "nội dung truy cập" là tên cho phép của bạn.
Nếu bạn biết sự cho phép của mô-đun nào, bạn cũng có thể kiểm tra triển khai hook_perm () (D6) / hook_pemission () (D7) tương ứng của mô-đun đó.
Trong nhiều trường hợp, bạn muốn xác định pememony của riêng mình và sử dụng những cái này, bạn có thể làm điều đó với các hook ở trên.
Sử dụng mô-đun phát
Sau khi cài đặt và kích hoạt mô-đun Devel , hãy điều hướng đến admin/config/development/devel
. Có một cài đặt có tiêu đề, "Hiển thị tên máy của các quyền và mô-đun". Hãy chắc chắn rằng đã được kiểm tra.
Bây giờ trên trang quyền tại people/permissions
, di chuột qua tên của quyền mà bạn đang đặt câu hỏi. Nó có thể trì hoãn một hoặc hai giây, nhưng sau đó giá trị chuỗi sẽ hiển thị.
Dưới đây là một thay đổi hình thức đơn giản sẽ thêm khóa quyền vào tên trên trang quyền. Điều đó sẽ làm cho nó dễ dàng hơn để tìm kiếm nó. Bạn sẽ cần thêm nó vào một mô-đun tùy chỉnh và thay thế "mymodule" bằng tên của mô-đun đó.
/**
* Implements hook_form_FORM_ID_alter().
*/
function mymodule_form_user_admin_permissions_alter(&$form, $form_state) {
foreach ($form['permission'] as $key => &$item) {
if (isset($item['#type']) && $item['#type'] == 'item') {
$item['#markup'] .= ' (' . $key . ')';
}
}
}
Tôi đã tạo đoạn mã JavaScript này giúp tôi với điều này. Tôi đã thử nghiệm nó trong Drupal 7 chỉ với chủ đề Shiny .
Về cơ bản, nó xuất tên máy, được lấy từ hộp kiểm đầu tiên trên tên đó, vào ô đầu tiên, dưới nhãn. Kịch bản dựa trên jQuery, đây không phải là vấn đề trên Drupal 7.
Tôi thường dán nó trên bảng điều khiển Công cụ dành cho nhà phát triển và chạy nó từ đó. Tôi có thể tạo một bookmarklet cho nó trong tương lai.
// Go through each of the rows on the permissin table
rows = jQuery('#permissions tr');
rows.each(function() {
// Get the first checkbox in the row.
checkbox = jQuery('.checkbox .form-checkbox', this).first();
// Get the first cell, containing the permission label.
nameCell = jQuery('td:first-child', this);
// In case this is not a permission row
if(checkbox.length == 0) {
return;
}
// Embed the permission maching name on permission label cell.
nameCell.append("<div><code>" + checkbox.val() + "</code></div>");
});
Đây là một mô-đun đơn giản để làm cho nó dễ dàng: Danh sách đối số truy cập
Trân trọng
Chỉ cần thả vào một số mô-đun, bạn sẽ thấy quyền của máy tại / admin / people / allow
function YOURMODULE_form_user_admin_permissions_alter(&$form, &$form_state)
{
$perms = &$form['permission'];
$group_counter = 0;
foreach ($perms as $k => &$v) {
if ($k == $group_counter) { // skip fieldsets
$group_counter++;
continue;
}
$v['#markup'] .= ' (<span class="description" style="color:brown">'.$k.'</span>)';
}
}
Trân trọng
array_keys()
bạn rõ ràng chỉ nhận được thông tin được yêu cầu. Sau đó, bạn cũng có thể sử dụng kết quả tronguser_role_grant_permissions
, ví dụ để cấp cho vai trò quản trị viên tất cả các quyền:user_role_grant_permissions(variable_get("user_admin_role"), array_keys(user_permission_get_modules()));