3

Drupal 8 supports Multilingual (i18n) in core. I was wondering, is it possible to restrict users to be able to add/edit content for only one specific language?

3 Answers 3

3

Yes, you can use hook_node_access to control access to add/edit for the node.

For example, you can check the value of:

$language = \Drupal::languageManager()->getCurrentLanguage()->getId();

and return the access result accordingly

1

Working code example:

use Drupal\node\NodeInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Access\AccessResult;

/**
 * Implements hook_node_access().
 *
 * Prevent editor role to edit and/or delete fr/en nodes. Quick and dirty.
 */
function MYMODULE_node_access(NodeInterface $node, $op, AccountInterface $account) {

  $roles = $account->getRoles();

  $current_language = \Drupal::languageManager()->getCurrentLanguage();
  $lang             = $current_language->getId();

  if (!in_array('administrator', $roles) && !in_array('publisher', $roles)) {
    if ($op == 'update' || $op == 'delete') {
      if ($lang == 'en' || $lang == 'fr') {
        return AccessResult::forbidden();
      }
    }
  }

  // No opinion.
  return AccessResult::neutral();
}
0

The Allowed Languages module makes it possible to set restrictions on which content a user can edit based on language.

https://www.drupal.org/project/allowed_languages

Once installed against each user profile you can check which languages the user can edit as shown below.

Allowed Languages

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.