ノードの日時作成に基づいて 1 つ以上の cck フィールドを表示する許可を与える特定の動作を探しています。
特に、私はする必要があります:
ロール A への付与: すべての CCK (新旧) へのフル アクセス ロール B への付与: すべての CCK へのアクセス、ただし 1 年以上経過したノードに存在するもののみへのアクセス 匿名ユーザー: CCK フィールドへのアクセスなし
どうすればこの結果を得ることができますか?
ノードの日時作成に基づいて 1 つ以上の cck フィールドを表示する許可を与える特定の動作を探しています。
特に、私はする必要があります:
ロール A への付与: すべての CCK (新旧) へのフル アクセス ロール B への付与: すべての CCK へのアクセス、ただし 1 年以上経過したノードに存在するもののみへのアクセス 匿名ユーザー: CCK フィールドへのアクセスなし
どうすればこの結果を得ることができますか?
You want to control permissions on a field level so I would avoid using hook_nodeapi()
Instead I would suggest you use hook_field_access
(or use a combination of hook_nodeapi
and hook_field_access()
example in pseudocode:
mymodule_hook_field_access($op, $field, $account = NULL, $node = NULL){
if($field['field_name'] == 'field_xyz'){
switch($op){
case 'view':
if($node->created was less than a year ago && $account role is A){
return FALSE;
}
if($node->created was less than a year ago && $account role is B){
return TRUE;
}
return FALSE;
break;
case 'edit':
...
...
}
}
return TRUE;
}
See to see the hook being called http://api.lullabot.com/content_access
hook_field_access()
is available in Drupal 6 from the CCK module. In Drupal 7 it is in core.
提案してくれてありがとう!
hook_field_access() は、私が探しているソリューションです。
以前は$node->field_FIELDNAME[0]['#value']を使用していましたが、テーマ (または template.php) にユーザー アクセス用の関数を配置するのは好きではありません。テーマの問題もありました。この解決策では、セマンティック CCKモジュールを使用して簡単でクリーンな HTML 出力を行うことができませんでした。
再度、感謝します!さよなら!
Ps。なぜ私の投稿が最後の後にないのですか??!!
hook_nodeapi()
カスタム モジュールに実装し$op == 'view'
、適切なノード タイプとユーザー ロールをチェックします。役割に応じて、問題のフィールド エントリを `$node->content' 配列から削除します。
これを機能させるには、CCK の後にカスタム モジュールを呼び出す必要があることに注意してください。そうしないと、CCK フィールドが `$node->content' 配列でまだ利用できないためです。そのため、名前によっては、カスタム モジュールの重みを CCK よりも高い値に変更する必要がある場合があります。
ノード編集フォームにも同じロジックを適用する必要がある場合は、 で同じことを行い$op == 'prepare'
ます。
node-{YOURTYPE}.tpl.php を作成し、テーマを設定し、日付からフィールドの依存関係を表示する条件を追加するのは簡単です...