2010-11-19 9 views
2

ノードタイプは、特定の状況下では、その役割が持つ権限を超えてのみ編集する必要があります。私はカスタムモジュールでこれをやっています。Drupalでノードタイプを編集するためのカスタムアクセス関数を作成する方法は?

編集タブを表示する機能を削除し、フォームの送信後にユーザーに警告するフォームに検証機能を追加するだけでなく、

何らかのアクセス機能を追加する必要があります。誰でもこれを行う方法を知っていますか?

ありがとうございます。

--Update--

私は今、動作するはずの2つの方法があります。 hook_nodeapi使用

1):

function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) { 
    switch($op) { 
    case 'prepare': 
     if(!mymodule_access_function($node)) { 
     $_REQUEST['destination'] = 'my_access_denied_page'; 
     // rest of function 

2)Iはhook_menu_alterを使用して、メニュー項目にアクセスコールバック関数を挿入することができます。

私の目的では、2が理にかなっています。私は(1)のコードを記入すると思いましたが、これはこのページで与えられた答えであり、動作します。

答えて

3

タブの可視性のために、モジュールフックからテーマテンプレートまたはCSSパッチまで、テーマ出力を変更することができます。データの可視性とパフォーマンスの問題の要件に応じて、いくつかのソリューションが他のソリューションより優れています。どのような処理が必要かについてさらに詳しく知る必要があります。アクセスのために

hook_nodeapi()$オペアンプは要件がある場合(のような別のフォームにリダイレクト、「を準備」は、この時点では$ノードに対してカスタムコードを実行し、あなたが何をしたいかを決めるです存在しないか、またはアクセスが拒否されたページ)。

編集:リダイレクトは、通常で行われ$ _REQUEST [ '先'] = '先/別名'(実行を中断しません)、時々drupal_goto( '先/別名')(休憩実行)が適していますが、しばしばうまくいきません。リダイレクトをプロジェクトで追跡しておいてください。複数のロジック条件があると、望ましくなく、デバッグ動作が難しくなる可能性があります。

+0

タッチが関わっていますが、アクセス機能は既に書き込まれています。私のモジュールはスポーツリーグを管理しています。チームキャプテンはゲームのスコアを入力できます。アクセスチェック(1)は、あなたがリーグの権限を持っているかどうかをチェックし、常に許可します。(2)プレイしているチームのキャプテンであるかどうかを確認し、そうであればチェックします。試合が予定されてから48時間以上。 (2)&&!(3)ならば許可します。 – Ted

+0

私はhook_nodeapi(既に関数が書かれています)を使ってテストする方法を知っていますが、アクセスが拒否されたページにリダイレクトする方法はわかりません。それはどうですか? – Ted

+0

私の質問を更新しました。 – Ted

1

すべてのコンテンツタイプは、ノードの作成、編集、削除のためのデフォルトのアクセス許可設定がadmin/user/permissionsです。匿名または認証済みのユーザーに割り当てることができます。グループに割り当てたい場合は、別の役割を作成し、上記のように権限を割り当てます。

+0

ありがとうございますが、私がしようとしているのは、デフォルトの許可よりもはるかに複雑です。私はいくつかのCCK値をチェックし、いくつかのクエリと比較を行い、ユーザーがアクセスできるかどうかを判断する必要があります。 – Ted

関連する問題