You are here

function forum_access_access in Forum Access 8

Same name and namespace in other branches
  1. 5 forum_access.module \forum_access_access()
  2. 6 forum_access.module \forum_access_access()
  3. 7 forum_access.module \forum_access_access()

Access checking.

6 calls to forum_access_access()
CommentForumFormatter::viewElements in src/Plugin/Field/FieldFormatter/CommentForumFormatter.php
Builds a renderable array for a field value.
forum_access_comment_access in ./forum_access.module
Implements hook_ENTITY_TYPE_access() for comment entities.
forum_access_entity_access_by_tid in includes/forum_access.common.inc
Check access for entity.
forum_access_forum_check_view in includes/forum_access.common.inc
Check access to view forums and containers.
forum_access_node_create_access in ./forum_access.module
Implements hook_ENTITY_TYPE_create_access() for node entities.

... See full list

File

includes/forum_access.common.inc, line 46
Handle common forum access functionality.

Code

function forum_access_access($op, $tid, $account = NULL) {
  module_load_include('inc', 'forum_access', 'includes/forum_access.acl');
  $cache =& drupal_static(__FUNCTION__, []);

  // Load current user if account is empty.
  if (!$account) {
    $account = \Drupal::currentUser();
  }
  if ($account
    ->hasPermission('bypass node access')) {
    return TRUE;
  }
  if ($op == 'delete' && $account
    ->hasPermission('delete any forum content')) {
    return TRUE;
  }
  if ($op == 'update' && $account
    ->hasPermission('edit any forum content')) {
    return TRUE;
  }
  if (!isset($cache[$account
    ->id()][$tid][$op])) {

    // Check if user's roles allow him permissions to operators.
    $query = \Drupal::database()
      ->select('forum_access', 'fa')
      ->fields('fa', [
      'tid',
    ]);
    forum_access_modify_check_query($query, [
      'op' => $op,
      'tid' => $tid,
    ]);
    $query
      ->condition('fa.rid', $account
      ->getRoles(), 'IN');
    $result = $query
      ->execute()
      ->fetchField();
    if ($result) {
      $cache[$account
        ->id()][$tid][$op] = TRUE;
    }
    else {

      // Check our moderators too.
      $acl_moderate = forum_access_is_moderator($account, $tid);
      $cache[$account
        ->id()][$tid][$op] = !empty($acl_moderate);
    }
  }
  return $cache[$account
    ->id()][$tid][$op];
}