it-swarm-vi.com

Làm cách nào tôi có thể tìm ra danh sách các giá trị $ chuỗi có sẵn cho hàm user_access ($ string)?

user_access ($ chuỗi, $ account = NULL)

$ string: Quyền, chẳng hạn như "các nút quản trị", đang được kiểm tra.

Làm cách nào tôi có thể tìm ra danh sách các giá trị chuỗi $ có sẵn cho hàm user_access()?

27
gilzero

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);
  }
}
12
Haza

Như @Berdir đã nói, cách dễ nhất để xem 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.

Example

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á')

enter image description here

Đây là chuỗi bạn cần cung cấp làm đối số truy cập trong hook_men ()

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_men ())

function fsrsys_menu() {
    $items = array();
    $items['my-custom-url'] = array(
        'access callback' => 'user_access',
        'access arguments' => array('create coupon content'),
    );
    return $items;
}
26
Citricguy

Đâ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);
  }
}
9
fureigh

Bạn có thể sử dụng hàm user_permission_get_modules() , 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.

6
Елин Й.

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, trong 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 việc 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 số tiền riêng của mình và sử dụng những thứ này, bạn có thể làm điều đó với các móc ở trên.

4
Berdir

Sử dụng Mô-đun Devel

  • Sau khi cài đặt và bật mô-đun Devel , đ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 sự cho phép mà bạn đang 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ị.

4
mlanning

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ỉ trên chủ đề sáng bóng .

Về cơ bản, nó xuất ra 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>");
});
1
Batandwa

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 . ')';
    }
  }
}
1
Randall Knutson

Đâ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

1
Bilal
db_query("SELECT DISTINCT {permission} FROM role_permission");
1
emallove

chỉ cần thả vào một số mô-đun, bạn sẽ thấy các 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

0
Yurii K.