function domain_menus_menu_link_content_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_access()
- 9.1.x domain_menus.module \domain_menus_menu_link_content_access()
Implements hook_ENTITY_TYPE_access().
Allow menu link edit access in domain menus based on domain_menus permissions
File
- ./
domain_menus.module, line 249 - Domain menus implementation through entity create, delete, and access customizations.
Code
function domain_menus_menu_link_content_access(EntityInterface $entity, $operation, AccountInterface $account) {
$menu_link = $entity;
$menu_id = $menu_link
->getMenuName();
$menu = Menu::load($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();
}