例 3 : %DB_USER リソース
この例では、USER データベースのさまざまな特権と、ユーザがデータベースに保存されたデータとコードを使用できることを試してみます。
-
まだクラス SecurityTutorial.AuthorizationTests を USER ネームスペースの Caché にインポートしていなければ、ここでインポートします。
-
ターミナルを開き、まだ UnknownUser としてログインしている間に、SecurityTutorial.AuthorizationTests の CreateTestData メソッドを実行します。これにより、この例の後半で使用するデータが作成されます。
USER>Do ##class(SecurityTutorial.AuthorizationTests).CreateTestData() USER>Write ^TestData MyInitialData
-
UserDatabase という名前の新しいロールを作成します。このロールに以下の特権を与えます。
-
%DB_USER:READ
-
%Development:USE
-
-
ユーザを 1 人作成し、このユーザを UserDatabase ロールに追加します。
-
ターミナルを開き、$SYSTEM.Security.Login を使用して、前の手順で作成したユーザとしてログインします。
-
SecurityTutorial.AuthorizationTests の ReadTestData メソッドを実行します。このメソッドは、USER データベースからデータを読み取り、表示します。このユーザは %DB_USER:READ を持っているため、このメソッドは正常にデータを返します。
-
ここで、SecurityTutorial.AuthorizationTests の UpdateTestData メソッドの実行を試みます。このメソッドは、USER データベースにデータを書き込みます。このユーザは %DB_USER:WRITE を持っていないため、このメソッドは失敗し、<PROTECT> エラーが生成されます。
-
次に、UserDatabase ロールを編集し、%DB_USER:READ,WRITE を与えます。
-
最後に、さきほど作成したユーザとしてログインしている状態で、UpdateTestData メソッドを実行します。このとき、ユーザは USER データベースでの WRITE 特権を持っているので、メソッドは正常に終了します。