Skip to content
Snippets Groups Projects
Commit 99151ae7 authored by catch's avatar catch
Browse files

Issue #2673726 by Jaesin, dawehner: Allow modules to proxy permissions for other modules

parent e01b1cc2
Branches
Tags
2 merge requests!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!789Issue #3210310: Adjust Database API to remove deprecated Drupal 9 code in Drupal 10
...@@ -163,8 +163,8 @@ protected function buildPermissionsYaml() { ...@@ -163,8 +163,8 @@ protected function buildPermissionsYaml() {
$callback_permission += array( $callback_permission += array(
'description' => NULL, 'description' => NULL,
'provider' => $provider,
); );
$callback_permission['provider'] = $provider;
$all_callback_permissions[$name] = $callback_permission; $all_callback_permissions[$name] = $callback_permission;
} }
...@@ -182,7 +182,7 @@ protected function buildPermissionsYaml() { ...@@ -182,7 +182,7 @@ protected function buildPermissionsYaml() {
} }
$permission['title'] = $this->t($permission['title']); $permission['title'] = $this->t($permission['title']);
$permission['description'] = isset($permission['description']) ? $this->t($permission['description']) : NULL; $permission['description'] = isset($permission['description']) ? $this->t($permission['description']) : NULL;
$permission['provider'] = $provider; $permission['provider'] = !empty($permission['provider']) ? $permission['provider'] : $provider;
} }
$all_permissions += $permissions; $all_permissions += $permissions;
......
...@@ -113,6 +113,9 @@ public function testBuildPermissionsYaml() { ...@@ -113,6 +113,9 @@ public function testBuildPermissionsYaml() {
"'access module b': "'access module b':
title: 'Access B' title: 'Access B'
description: 'bla bla' description: 'bla bla'
'access module a via module b':
title: 'Access A via B'
provider: 'module_a'
"); ");
mkdir($url . '/module_c'); mkdir($url . '/module_c');
file_put_contents($url . '/module_c/module_c.permissions.yml', file_put_contents($url . '/module_c/module_c.permissions.yml',
...@@ -239,6 +242,7 @@ public function testBuildPermissionsYamlCallback() { ...@@ -239,6 +242,7 @@ public function testBuildPermissionsYamlCallback() {
file_put_contents($url . '/module_b/module_b.permissions.yml', file_put_contents($url . '/module_b/module_b.permissions.yml',
"permission_callbacks: "permission_callbacks:
- 'Drupal\\user\\Tests\\TestPermissionCallbacks::titleDescription' - 'Drupal\\user\\Tests\\TestPermissionCallbacks::titleDescription'
- 'Drupal\\user\\Tests\\TestPermissionCallbacks::titleProvider'
"); ");
mkdir($url . '/module_c'); mkdir($url . '/module_c');
file_put_contents($url . '/module_c/module_c.permissions.yml', file_put_contents($url . '/module_c/module_c.permissions.yml',
...@@ -271,6 +275,10 @@ public function testBuildPermissionsYamlCallback() { ...@@ -271,6 +275,10 @@ public function testBuildPermissionsYamlCallback() {
->with('Drupal\\user\\Tests\\TestPermissionCallbacks::titleDescription') ->with('Drupal\\user\\Tests\\TestPermissionCallbacks::titleDescription')
->willReturn(array(new TestPermissionCallbacks(), 'titleDescription')); ->willReturn(array(new TestPermissionCallbacks(), 'titleDescription'));
$this->controllerResolver->expects($this->at(2)) $this->controllerResolver->expects($this->at(2))
->method('getControllerFromDefinition')
->with('Drupal\\user\\Tests\\TestPermissionCallbacks::titleProvider')
->willReturn(array(new TestPermissionCallbacks(), 'titleProvider'));
$this->controllerResolver->expects($this->at(3))
->method('getControllerFromDefinition') ->method('getControllerFromDefinition')
->with('Drupal\\user\\Tests\\TestPermissionCallbacks::titleDescriptionRestrictAccess') ->with('Drupal\\user\\Tests\\TestPermissionCallbacks::titleDescriptionRestrictAccess')
->willReturn(array(new TestPermissionCallbacks(), 'titleDescriptionRestrictAccess')); ->willReturn(array(new TestPermissionCallbacks(), 'titleDescriptionRestrictAccess'));
...@@ -351,7 +359,7 @@ public function testPermissionsYamlStaticAndCallback() { ...@@ -351,7 +359,7 @@ public function testPermissionsYamlStaticAndCallback() {
* The actual permissions * The actual permissions
*/ */
protected function assertPermissions(array $actual_permissions) { protected function assertPermissions(array $actual_permissions) {
$this->assertCount(3, $actual_permissions); $this->assertCount(4, $actual_permissions);
$this->assertEquals($actual_permissions['access_module_a']['title'], 'single_description'); $this->assertEquals($actual_permissions['access_module_a']['title'], 'single_description');
$this->assertEquals($actual_permissions['access_module_a']['provider'], 'module_a'); $this->assertEquals($actual_permissions['access_module_a']['provider'], 'module_a');
$this->assertEquals($actual_permissions['access module b']['title'], 'Access B'); $this->assertEquals($actual_permissions['access module b']['title'], 'Access B');
...@@ -359,6 +367,7 @@ protected function assertPermissions(array $actual_permissions) { ...@@ -359,6 +367,7 @@ protected function assertPermissions(array $actual_permissions) {
$this->assertEquals($actual_permissions['access_module_c']['title'], 'Access C'); $this->assertEquals($actual_permissions['access_module_c']['title'], 'Access C');
$this->assertEquals($actual_permissions['access_module_c']['provider'], 'module_c'); $this->assertEquals($actual_permissions['access_module_c']['provider'], 'module_c');
$this->assertEquals($actual_permissions['access_module_c']['restrict access'], TRUE); $this->assertEquals($actual_permissions['access_module_c']['restrict access'], TRUE);
$this->assertEquals($actual_permissions['access module a via module b']['provider'], 'module_a');
} }
} }
...@@ -409,6 +418,14 @@ public function titleDescriptionRestrictAccess() { ...@@ -409,6 +418,14 @@ public function titleDescriptionRestrictAccess() {
); );
} }
public function titleProvider() {
return array(
'access module a via module b' => array(
'title' => 'Access A via B',
'provider' => 'module_a',
),
);
}
} }
/** /**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment