1

ノードの日時作成に基づいて 1 つ以上の cck フィールドを表示する許可を与える特定の動作を探しています。

特に、私はする必要があります:

ロール A への付与: すべての CCK (新旧) へのフル アクセス ロール B への付与: すべての CCK へのアクセス、ただし 1 年以上経過したノードに存在するもののみへのアクセス 匿名ユーザー: CCK フィールドへのアクセスなし

どうすればこの結果を得ることができますか?

4

4 に答える 4

2

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.

于 2010-09-17T16:26:33.840 に答える
1

提案してくれてありがとう!

hook_field_access() は、私が探しているソリューションです。

以前は$node->field_FIELDNAME[0]['#value']を使用していましたが、テーマ (または template.php) にユーザー アクセス用の関数を配置するのは好きではありません。テーマの問題もありました。この解決策では、セマンティック CCKモジュールを使用して簡単でクリーンな HTML 出力を行うことができませんでした。

再度、感謝します!さよなら!

Ps。なぜ私の投稿が最後の後にないのですか??!!

于 2010-09-18T12:24:23.283 に答える
1

hook_nodeapi()カスタム モジュールに実装し$op == 'view'、適切なノード タイプとユーザー ロールをチェックします。役割に応じて、問題のフィールド エントリを `$node->content' 配列から削除します。

これを機能させるには、CCK の後にカスタム モジュールを呼び出す必要があることに注意してください。そうしないと、CCK フィールドが `$node->content' 配列でまだ利用できないためです。そのため、名前によっては、カスタム モジュールの重みを CCK よりも高い値に変更する必要がある場合があります。

ノード編集フォームにも同じロジックを適用する必要がある場合は、 で同じことを行い$op == 'prepare'ます。

于 2010-09-16T21:43:59.937 に答える
0

node-{YOURTYPE}.tpl.php を作成し、テーマを設定し、日付からフィールドの依存関係を表示する条件を追加するのは簡単です...

于 2010-09-16T20:49:35.630 に答える