public function UserFlagType::actionAccess in Flag 8.4
Checks whether a user has permission to flag/unflag or not.
Parameters
string $action: The action for which to check permissions, either 'flag' or 'unflag'.
\Drupal\flag\FlagInterface $flag: The flag object.
\Drupal\Core\Session\AccountInterface $account: An AccountInterface object.
\Drupal\Core\Entity\EntityInterface $flaggable: (optional) The flaggable entity.
Return value
\Drupal\Core\Access\AccessResult An AccessResult object.
Overrides EntityFlagType::actionAccess
File
- src/
Plugin/ Flag/ UserFlagType.php, line 144  
Class
- UserFlagType
 - Provides a flag type for user entities.
 
Namespace
Drupal\flag\Plugin\FlagCode
public function actionAccess($action, FlagInterface $flag, AccountInterface $account, EntityInterface $flaggable = NULL) {
  $access = parent::actionAccess($action, $flag, $account, $flaggable);
  if ($flaggable && $this
    ->hasExtraPermission('owner')) {
    // Permit selfies.
    $permission = $action . ' ' . $flag
      ->id() . ' own user account';
    $selfies_permission_access = AccessResult::allowedIfHasPermission($account, $permission)
      ->addCacheContexts([
      'user',
    ]);
    $account_match_access = AccessResult::allowedIf($account
      ->id() == $flaggable
      ->id());
    $own_access = $selfies_permission_access
      ->andIf($account_match_access);
    $access = $access
      ->orIf($own_access);
    // Act on others' profiles.
    $permission = $action . ' ' . $flag
      ->id() . ' other user accounts';
    $others_permission_access = AccessResult::allowedIfHasPermission($account, $permission)
      ->addCacheContexts([
      'user',
    ]);
    $account_mismatch_access = AccessResult::allowedIf($account
      ->id() != $flaggable
      ->id());
    $others_access = $others_permission_access
      ->andIf($account_mismatch_access);
    $access = $access
      ->orIf($others_access);
  }
  return $access;
}