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