diff -u b/core/modules/node/node.views.inc b/core/modules/node/node.views.inc --- b/core/modules/node/node.views.inc +++ b/core/modules/node/node.views.inc @@ -718,21 +718,17 @@ // check for no access control $access = $display->getOption('access'); if (empty($access['type']) || $access['type'] == 'none') { - $select = db_select('role', 'r'); - // @todo dawehner task :). - $select->innerJoin('role_permission', 'p', 'r.rid = p.rid'); - $result = $select->fields('r', array('rid')) - ->fields('p', array('permission')) - ->condition('r.rid', array('anonymous', 'authenticated'), 'IN') - ->condition('p.permission', 'access content') - ->execute(); - - foreach ($result as $role) { - $role->safe = TRUE; - $roles[$role->rid] = $role; + // Find out whether anonymous and authenticated role have the + // `access content` permission. + $roles = array(); + $roles['anonymous'] = array(); + $roles['authenticated'] = array(); + $roles_result = user_permission_roles('access content', array('anonymous' => TRUE, 'authenticated' => TRUE)); + foreach ($roles_result as $rid) { + $roles[$rid]['safe'] = TRUE; } - if (!($roles['anonymous']->safe && $roles['authenticated']->safe)) { - $ret[] = Analyzer::formatMessage(t('Some roles lack permission to access content, but display %display has no access control.', array('%display' => $display['display_title'])), 'warning'); + if (!empty($roles['anonymous']['safe']) && !empty($roles['authenticated']['safe'])) { + $ret[] = Analyzer::formatMessage(t('Some roles lack permission to access content, but display %display has no access control.', array('%display' => $display->display['display_title'])), 'warning'); } $filters = $display->getOption('filters'); foreach ($filters as $filter) { diff -u b/core/modules/user/lib/Drupal/user/Plugin/views/field/Permissions.php b/core/modules/user/lib/Drupal/user/Plugin/views/field/Permissions.php --- b/core/modules/user/lib/Drupal/user/Plugin/views/field/Permissions.php +++ b/core/modules/user/lib/Drupal/user/Plugin/views/field/Permissions.php @@ -46,29 +46,19 @@ } if ($uids) { - // Get a list of all the modules implementing a hook_permission() and sort by - // display name. - $module_info = system_get_info('module'); - $modules = array(); - foreach (module_implements('permission') as $module) { - $modules[$module] = $module_info[$module]['name']; - } - asort($modules); - - $permissions = module_invoke_all('permission'); - - // @todo dawehner task. :) - $query = db_select('role_permission', 'rp'); - $query->join('users_roles', 'u', 'u.rid = rp.rid'); - $query->fields('u', array('uid', 'rid')); - $query->addField('rp', 'permission'); - $query->condition('u.uid', $uids); - $query->condition('rp.module', array_keys($modules)); - $query->orderBy('rp.permission'); - $result = $query->execute(); + // Load all permissions to be able show the label. + $all_permissions = module_invoke_all('permission'); - foreach ($result as $perm) { - $this->items[$perm->uid][$perm->permission]['permission'] = $permissions[$perm->permission]['title']; + foreach ($values as $row) { + $account = $this->get_entity($row); + // Get a list of roles of all the users to load all permissions of each + // user. + $role_permissions = user_role_permissions($account->roles); + foreach ($role_permissions as $role => $permissions) { + foreach ($permissions as $permission => $value) { + $this->items[$account->uid][$permission]['permission'] = $all_permissions[$permission]['title']; + } + } } } }