function content_access_node_access_records in Content Access 8
Same name and namespace in other branches
- 5 content_access.module \content_access_node_access_records()
- 6 content_access.module \content_access_node_access_records()
- 7 content_access.module \content_access_node_access_records()
Implements hook_node_access_records().
File
- ./
content_access.module, line 80 - Content access module file.
Code
function content_access_node_access_records(NodeInterface $node) {
if (content_access_disabling() || !$node
->isPublished()) {
return;
}
// Apply per node settings if necessary.
if (content_access_get_settings('per_node', $node
->getType())) {
$grants = [];
foreach ([
'view',
'update',
'delete',
] as $op) {
foreach (content_access_get_rids_per_node_op($op, $node) as $rid) {
$gid = content_access_get_role_gid($rid);
$grants[$gid]['grant_' . $op] = 1;
}
}
foreach ($grants as $gid => $grant) {
$grants[$gid] = content_access_proccess_grant($grant, $gid, $node);
}
// Care for the author grant.
$grant = [];
foreach ([
'view',
'update',
'delete',
] as $op) {
// Get all roles that have access to use $op on this node.
$per_node_settings = content_access_per_node_setting($op, $node);
$any_roles = array_combine($per_node_settings, $per_node_settings);
$any_roles = $any_roles ? $any_roles : [];
$any_roles += $op != 'view' ? content_access_get_settings($op, $node
->getType()) : [];
$grant['grant_' . $op] = content_access_own_op($node, $any_roles, content_access_get_rids_per_node_op($op . '_own', $node));
}
if (array_filter($grant)) {
$grant['realm'] = 'content_access_author';
$grants[] = content_access_proccess_grant($grant, $node
->getOwnerId(), $node);
}
}
else {
// Apply the content type defaults.
$grants = content_access_get_type_grant($node);
}
if (empty($grants)) {
// This means we grant no access.
$grants[] = content_access_proccess_grant([], 0, $node);
}
else {
content_access_optimize_grants($grants, $node);
}
return $grants;
}