Skip to content

Commit 3168ea5

Browse files
fix(Spanner): Add sample for add and drop database roles for Spanner (GoogleCloudPlatform#1689)
1 parent 9450de4 commit 3168ea5

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
<?php
2+
/**
3+
* Copyright 2022 Google Inc.
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
/**
19+
* For instructions on how to run the full sample:
20+
*
21+
* @see https://github.com/GoogleCloudPlatform/php-docs-samples/tree/master/spanner/README.md
22+
*/
23+
24+
namespace Google\Cloud\Samples\Spanner;
25+
26+
// [START spanner_add_and_drop_database_role]
27+
use Google\Cloud\Spanner\SpannerClient;
28+
29+
/**
30+
* Adds and drops roles to the Singers table in the example database.
31+
* Example:
32+
* ```
33+
* add_drop_database_role($instanceId, $databaseId);
34+
* ```
35+
*
36+
* @param string $instanceId The Spanner instance ID.
37+
* @param string $databaseId The Spanner database ID.
38+
*/
39+
function add_drop_database_role(string $instanceId, string $databaseId): void
40+
{
41+
$spanner = new SpannerClient();
42+
$instance = $spanner->instance($instanceId);
43+
$database = $instance->database($databaseId);
44+
45+
$roleParent = 'new_parent';
46+
$roleChild = 'new_child';
47+
48+
$operation = $database->updateDdlBatch([
49+
sprintf('CREATE ROLE %s', $roleParent),
50+
sprintf('GRANT SELECT ON TABLE Singers TO ROLE %s', $roleParent),
51+
sprintf('CREATE ROLE %s', $roleChild),
52+
sprintf('GRANT ROLE %s TO ROLE %s', $roleParent, $roleChild)
53+
]);
54+
55+
printf('Waiting for create role and grant operation to complete... %s', PHP_EOL);
56+
$operation->pollUntilComplete();
57+
58+
printf('Created roles %s and %s and granted privileges %s', $roleParent, $roleChild, PHP_EOL);
59+
60+
$operation = $database->updateDdlBatch([
61+
sprintf('REVOKE ROLE %s FROM ROLE %s', $roleParent, $roleChild),
62+
sprintf('DROP ROLE %s', $roleChild),
63+
sprintf('REVOKE SELECT ON TABLE Singers FROM ROLE %s', $roleParent),
64+
sprintf('DROP ROLE %s', $roleParent)
65+
]);
66+
67+
printf('Waiting for revoke role and drop role operation to complete... %s', PHP_EOL);
68+
$operation->pollUntilComplete();
69+
70+
printf('Revoked privileges and dropped roles %s and %s %s', $roleChild, $roleParent, PHP_EOL);
71+
}
72+
// [END spanner_add_and_drop_database_role]
73+
74+
// The following 2 lines are only needed to run the samples
75+
require_once __DIR__ . '/../../testing/sample_helpers.php';
76+
\Google\Cloud\Samples\execute_sample(__FILE__, __NAMESPACE__, $argv);

spanner/test/spannerTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -926,6 +926,18 @@ public function testDmlReturningDelete()
926926
$this->assertStringContainsString($expectedOutput, $output);
927927
}
928928

929+
/**
930+
* @depends testCreateDatabase
931+
*/
932+
public function testAddDropDatabaseRole()
933+
{
934+
$output = $this->runFunctionSnippet('add_drop_database_role');
935+
$this->assertStringContainsString('Waiting for create role and grant operation to complete... ' . PHP_EOL, $output);
936+
$this->assertStringContainsString('Created roles new_parent and new_child and granted privileges ' . PHP_EOL, $output);
937+
$this->assertStringContainsString('Waiting for revoke role and drop role operation to complete... ' . PHP_EOL, $output);
938+
$this->assertStringContainsString('Revoked privileges and dropped roles new_child and new_parent ' . PHP_EOL, $output);
939+
}
940+
929941
private function testGetInstanceConfig()
930942
{
931943
$output = $this->runFunctionSnippet('get_instance_config', [

0 commit comments

Comments
 (0)