Ограничения на материал по роли

Главные вкладки

Комментарии

Аватар пользователя leha373 leha373 4 ноября 2020 в 11:03

Я хочу сделать вот что, чтобы пользователь с ролью Психолог, мог только создать одну ноду (тип материала: Психолог), и если он захочет создать вторую ноду, выскакивало сообщение "лимит превышен".Такое реализует модуль ENTITY LIMIT,но при лимите переадрисует на страницу доступ запрещен, а мне нужно чтобы было сообщение

Аватар пользователя leha373 leha373 4 ноября 2020 в 11:09

Вот часть кода модуля Entity Limin файл entity_limit.module

<?php
function entity_limit_entity_create_access(AccountInterface $account, array $context$entity_bundle) {
  
$result TRUE;
  if (!empty(
$context['entity_type_id'])) {
    
$result = \Drupal::service('entity_limit.inspector')->checkEntityLimitAccess(
      
$context['entity_type_id'],
      
$entity_bundle,
      
$account
    
);
  }

  return (

$result) ? AccessResult::neutral() : AccessResult::forbidden();
}
?>

в строчке <?phpreturn ($result) ? AccessResult::neutral() : AccessResult::forbidden();?>
если заменить <?php: AccessResult::forbidden();?> на переадрисацию какую нибудь сработает?

Аватар пользователя leha373 leha373 4 ноября 2020 в 18:58

Вот примерно

<?php
function limit_articles_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state$form_id)
{
    
// check if user is about to create new node of type page. Not called on edit
    
if ($form_id == 'node_article_form') {
        
$form['#validate'][] = '_node_page_form_custom_validate';
    }
}

function 

_node_page_form_custom_validate(array &$form, \Drupal\Core\Form\FormStateInterface $form_state) {

    

// return if is admin
    
$groups = \Drupal::currentUser()->getRoles();
    foreach(
$groups as $group) {
        if(
$group == 'administrator')
            return 
true;
    }

    

// get current user id
    
$user_uid = \Drupal::currentUser()->id();

    

// count number of nodes created by current user in last week
    
$query = \Drupal::entityQuery('node');
    
$query->condition('type','article'); // Limit the type of node to check
    
$query->condition('uid'$user_uid);

    

    

$count $query->count()->execute();

    

// if number of posts reachs limit, stop the form from saving data
    
if($count >= 1) {
        
$form_state->setErrorByName(''t('Вы достигли предела @count статей.', array('@count' => $count)));
    }

    
}

?>

только работает когда сохраняю ноду, а как сделать при переходе node/add/article вылетало предупреждение?