Mercurial > hg > isophonics-drupal-site
diff core/modules/user/src/Access/PermissionAccessCheck.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/user/src/Access/PermissionAccessCheck.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,45 @@ +<?php + +namespace Drupal\user\Access; + +use Drupal\Core\Access\AccessResult; +use Drupal\Core\Routing\Access\AccessInterface; +use Drupal\Core\Session\AccountInterface; +use Symfony\Component\Routing\Route; + +/** + * Determines access to routes based on permissions defined via + * $module.permissions.yml files. + */ +class PermissionAccessCheck implements AccessInterface { + + /** + * Checks access. + * + * @param \Symfony\Component\Routing\Route $route + * The route to check against. + * @param \Drupal\Core\Session\AccountInterface $account + * The currently logged in account. + * + * @return \Drupal\Core\Access\AccessResultInterface + * The access result. + */ + public function access(Route $route, AccountInterface $account) { + $permission = $route->getRequirement('_permission'); + + if ($permission === NULL) { + return AccessResult::neutral(); + } + + // Allow to conjunct the permissions with OR ('+') or AND (','). + $split = explode(',', $permission); + if (count($split) > 1) { + return AccessResult::allowedIfHasPermissions($account, $split, 'AND'); + } + else { + $split = explode('+', $permission); + return AccessResult::allowedIfHasPermissions($account, $split, 'OR'); + } + } + +}