function domain_menus_menu_link_content_create_access in Domain Menus for Domains 3.x
Same name and namespace in other branches
- 9.x domain_menus.module \domain_menus_menu_link_content_create_access()
- 9.1.x domain_menus.module \domain_menus_menu_link_content_create_access()
Implements hook_ENTITY_TYPE_create_access().
Allow menu link create access to domain menus based on domain_menus permissions
File
- ./
domain_menus.module, line 212 - Domain menus implementation through entity create, delete, and access customizations.
Code
function domain_menus_menu_link_content_create_access(AccountInterface $account, array $context, $entity_bundle) {
$route = Drupal::routeMatch();
if ($menu = $route
->getParameter('menu')) {
if (_domain_menus_is_domain_menu($menu)) {
$menu_id = $menu
->id();
$menu_domains = $menu
->getThirdPartySetting("domain_menus", "domains", []);
$user = \Drupal::entityTypeManager()
->getStorage('user')
->load($account
->id());
//$user_domains = \Drupal::service('domain_access.manager')->getAccessValues($user);
$user_domains_string = $user
->get(DOMAIN_ACCESS_FIELD)
->getString();
$user_domains = explode(', ', $user_domains_string);
$menu_and_user_domains = array_intersect($menu_domains, $user_domains);
$active_domain = \Drupal::service('domain.negotiator')
->getActiveDomain();
$active_domain_id = $active_domain
->id();
// permission check order matters, do "edit assigned domain menus" first
if ($account
->hasPermission('edit assigned domain menus')) {
if (!empty($menu_and_user_domains)) {
return AccessResult::allowed();
}
}
elseif ($account
->hasPermission('edit active domain menus')) {
if (in_array($active_domain_id, $menu_and_user_domains)) {
return AccessResult::allowed();
}
}
}
}
return AccessResult::neutral();
}