回答:
すべてのモジュールが独自の許可を定義できる限り、それらの文字列の「厳密な」リストはありません。このようなリストをプログラムで本当に必要とする場合は、「構築」する必要があります。
このスクリプトは、/ devel / phpページで実行できます。(もちろん、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);
}
}
@Berdirが言ったように、どのパーミッションが利用可能であるかを確認する最も簡単な方法は、Drupal 7のパーミッションadmin / people / permissionsにアクセスすることです。
実行し続けた問題は、アクセス許可を実際に使用するために「アクセス引数」として指定する必要のある文字列がわからないことです。使用したい権限の文字列名を見つける方法は次のとおりです(この例ではGoogle Chromeを使用しています)。
第一歩。admin / people / permissionsにアクセスして、使用するアクセス許可を見つけ、使用するアクセス許可の右側にあるチェックボックスを右クリックします。[要素の検査]を選択するか、ソースを確認します。
次に、チェックボックスの値を探し、値をメモします。(この場合、文字列は「クーポンコンテンツの作成」です)
これは、hook_menu()のアクセス引数として指定する必要がある文字列です
サンプルコード:(無関係なアイテムは削除されました。hook_menu()のタイトル、コールバックなどを忘れないでください)
function fsrsys_menu() {
$items = array();
$items['my-custom-url'] = array(
'access callback' => 'user_access',
'access arguments' => array('create coupon content'),
);
return $items;
}
Hazaの回答のD7バージョンは、print_rの代わりにDSMを使用し、hook_permissionを実装しないモジュールを除外するように変更されています。
// 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);
}
}
user_permission_get_modules()
定義済みのすべての権限とそのモジュールの配列を返す関数を使用できます。
パーミッションが属するモジュールを決定します。
戻り値
$ permission => $ moduleの形式の連想配列。
最も簡単な方法は、許可ページ(D7:admin / people / permissions、D6:admin / user / permissions)を確認することです。Drupal 6で表示される文字列を直接使用することに注意してください。7では、チェックボックスの名前/値を確認する必要があります。これは、Drupal 7で権限のタイトルと説明が翻訳されたためです。
したがって、Drupal 7で「公開コンテンツの表示」権限の名前が必要な場合、値は権限名である「コンテンツにアクセス」です。
パーミッションがどのモジュールからのものであるかがわかっている場合は、そのモジュールの対応するhook_perm()(D6)/ hook_pemission()(D7)実装も確認できます。
多くの場合、独自のペミッションを定義して使用したい場合は、上記のフックでそれを行うことができます。
Develモジュールの使用
Develモジュールをインストールして有効にした後、に移動しadmin/config/development/devel
ます。「権限とモジュールのマシン名を表示する」というタイトルの設定があります。それがチェックされていることを確認してください。
権限ページpeople/permissions
ので、質問している権限の名前にカーソルを合わせます。1〜2秒遅れることがありますが、文字列値が表示されます。
これは、許可ページの名前に許可キーを追加する簡単なフォームの変更です。これにより、検索が容易になります。カスタムモジュールに追加し、「mymodule」をそのモジュールの名前に置き換える必要があります。
/**
* 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 . ')';
}
}
}
これに役立つJavaScriptスニペットを作成しました。Drupal 7ではShinyテーマのみでテストしました。
基本的には、その名前の最初のチェックボックスから取得したマシン名を、ラベルの下の最初のセルに出力します。スクリプトはjQueryに依存していますが、これはDrupal 7では問題になりません。
通常、Developer Toolsコンソールに貼り付けて、そこから実行します。将来的にはブックマークレットを作成するかもしれません。
// 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>");
});
これは簡単にするためのシンプルなモジュールです:引数リストへのアクセス
よろしく
いくつかのモジュールをドロップするだけで、/ admin / people / permissionsにマシンのパーミッションが表示されます
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>)';
}
}
よろしく
array_keys()
明らかに要求された情報のみが取得されます。次に、の結果を使用してuser_role_grant_permissions
、たとえば管理者ロールにすべてのアクセス許可を付与することもできますuser_role_grant_permissions(variable_get("user_admin_role"), array_keys(user_permission_get_modules()));