web-dev-qa-db-ja.com

エディターユーザーが特定の1言語のコンテンツのみを編集するように制限する

私は、1人の編集者が英語のコンテンツを編集するためのアクセス権のみを持ち、もう1人が別の言語のコンテンツへのアクセス権のみを持つ、編集者用のロールを作成しようとしています。

私はかなり長い間調査しており、コンテンツアクセスもチェックアウトしましたが、解決策は見つかりませんでした。

どうすればこれを実現できますか?

ありがとうございました!

15
Bálint Deáki

ここで指定された回答が役立つ give-permission-to-translate-a-specific-language

インストール後 翻訳管理モジュール

翻訳機能を持つユーザーを作成できます

ユーザーの作成中に、ユーザーが英語からスペイン語にのみ翻訳でき、別のユーザーが英語からフランス語に翻訳できるように指定できます

  • userロールを持つ新しいユーザーを作成します:Translatortmgt moduleがインストールされています)

  • 次に、以下に示すように彼/彼女の翻訳スキルを選択してください:

enter image description here

2
Pravin Ajaaz

おそらくあなたはこれの7.x-devバージョンを使うかもしれません https://www.drupal.org/project/i18n_access

1
Josh

hook_menu_alter を使用して、ノード編集フォームのアクセスコールバックを置換または変更できます。

使用可能な言語に基づいて権限画面に表示される権限を作成するには、このフックを含むカスタムモジュールが必要になります。

/**
 * Implements hook_permission().
 */
function MODULENAME_permission(){

  //do something here to get an array of language names: $languages (I'm not familiar with i18n)

  foreach ($languages as $lang) {
    $permissions[$term->name] = array(
      'title' => t($lang->name), //Or wherever the langauge name is stored
      'description' => t('Edit content in '. $lang->name), //Again, adjust as needed
    );
  }

  return $permissions;
}

これにより、サイトの各言語のモジュール名の下の権限ページにチェックボックスが表示されます。言語名は変更しないと仮定します。その場合、これは安全です。

次に、ユーザーが次のように許可されていない場合は、それらを使用してアクセスをブロックする必要があります。

/**
 * Implements hook_node_access($node, $op, $account).
 */
function MODULENAME_node_access($node, $op, $account){

  //Get the language name for the node and store in variable $lang (again, I don't know how)

  //Then see if the user can do anything except view it
  if ($op != 'view'){
    if (!user_access($lang)){
      return NODE_ACCESS_DENY;
    }
  }

  return NODE_ACCESS_IGNORE;
}

この方法で行うと、ロールには「ノードの編集」権限と、ノードを編集するための言語ベースの権限が必要になります。

0
Darvanen