複数のコンテンツ タイプのフック パーマ
-
26-09-2019 - |
質問
Drupal 6.x
4 つの異なるコンテンツ タイプを管理するこのモジュールがあります。さらに言えば、同じモジュール内の各コンテンツに対する権限をどのように定義すればよいでしょうか?それは可能ですか?コンテンツタイプごとにアクセス許可を定義する方法がわかりません。hook_perm にはモジュール名を指定する必要があり、コンテンツタイプに基づいてアクセス許可を返すための引数(hook_access $node など)がありません。私がやりたいことは次のとおりです -
function mymodule_perm()
{
if(content1)
return array(
'create content1 node',
'edit content1 nodes',
'delete content1 nodes',
);
if(content2)
return array(
'create content2 node',
'edit content2 nodes',
'delete content2 nodes',
);
if(content3)
return array(
'create content3 node',
'edit content3 nodes',
'delete content3 nodes',
);
.......
}
ご協力をいただければ幸いです。
解決
通常、コンテンツ タイプの権限を自分で作成する必要はありません。ノード モジュールがこれを自動的に実行します。 node_perm()
. 。で宣言するすべてのコンテンツ タイプについて hook_node_info()
, を実行すると、ノード モジュールは次のように権限の固定セットを自動的に作成します。
$perms[] = 'create '. $name .' content';
$perms[] = 'delete own '. $name .' content';
$perms[] = 'delete any '. $name .' content';
$perms[] = 'edit own '. $name .' content';
$perms[] = 'edit any '. $name .' content';
それに加えて、モジュール内で任意の数の追加のアクセス許可を宣言できます。 hook_perm()
(一意である限り) 実装し、必要に応じてコード内で使用します。
ここで重要なことは、権限はそれ自体ではあまり機能しないということです。権限は権限ページに表示される名前に過ぎず、役割に関連付けることができます。それらは、それを使用するコードによってのみ「意味」を持ちます。 user_access()
呼び出します。
したがって、たとえば、コンテンツ タイプごとに特別な新しい権限を自分で作成したい場合は、それらを次のように宣言するだけです。 hook_perm()
すべて一度に (つまり、引数は必要ありません。作成したいパーミッションごとに 1 つの文字列を返すだけです)。
他のヒント
一般的に言えば、それはhook_perm()
から定義するすべての権限を返すであろう複数のコンテンツ・タイプを実装するモジュール。コンテンツタイプDrupalは実装許可を求めている知っている方法はありません。
Drupalは、常にモジュールにも、ノードに関連することができませんでしたすべての実装の権限のリストを要求します。例えば、自分の設定ページの権限のみを実装するいくつかのモジュールがあります。