例 4 : $SYSTEM.Security.Check
この例では、$SYSTEM.Security.Check メソッドを試します。このメソッドは、特権をチェックし、コード・ブロックの未承認実行を防ぐために、コード内で使用できます。
クラス SecurityTutorial.AuthorizationTests には、ProtectedMethod というメソッドがあります。このメソッドは、コード・ブロックの保護に $SYSTEM.Security.Check を使用します。メソッドの実行を試行するユーザが ProtectedMethod:USE 特権を持っている場合、このメソッドは、正常に $Username の値を返します。ユーザがこの特権を持っていない場合、メソッドはエラーを返します。
ClassMethod ProtectedMethod() As %String
{
if ($SYSTEM.Security.Check("ProtectedMethod","U"))
{
Quit $Username
}
Else
{
Quit "Error: Insufficient Privileges"
}
}
この例を使用する手順は次のとおりです。
-
まだ USER ネームスペースの Caché に SecurityTutorial.AuthorizationTests をインポートしていない場合は、これをインポートします。
-
ProtectedMethodExample という名前の新しいロールを作成します。このロールに %Development:USE および %DB_USER:RW を与えます。
-
ユーザを 1 人作成し、このユーザを ProtectedMethodExample ロールに追加します。
-
ターミナルを開き、$SYSTEM.Security.Login を使用して、前の手順で作成したユーザとしてログインします。SecurityTutorial.AuthorizationTests ProtectedMethod メソッドの実行を試みます。このユーザはまだ ProtectedMethod:USE を持っていないため、このメソッドは "エラー: 不十分な権限" を返します。
USER>Write $System.Security.Login("ProtMethodUser","PMU") 1 USER>Write ##class(SecurityTutorial.AuthorizationTests).ProtectedMethod() Error: Insufficient Privileges
-
ProtectedMethod という名前の新しいリソースを作成します。このリソースには、パブリック許可を割り当てません。ProtectedMethodExample ロールに ProtectedMethod:USE を与えます。
-
さきほど作成した、ProtectedMethodExample ロールのメンバであるユーザとしてログインしている状態で、SecurityTutorial.AuthorizationTests の ProtectedMethod を実行します。ここで、ユーザは ProtectedMethod:USE を持っているので、メソッドは True の分岐を実行し、$Username の値を返します。
USER>Write ##class(SecurityTutorial.AuthorizationTests).ProtectedMethod() ProtMethodUser