Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

例 4 : $SYSTEM.Security.Check

この例では、$SYSTEM.Security.Check メソッドを試します。このメソッドは、特権をチェックし、コード・ブロックの未承認実行を防ぐために、コード内で使用できます。

SecurityTutorial.AuthorizationExample クラスには、ProtectedMethod というメソッドがあります。このメソッドは、コード・ブロックの保護に $SYSTEM.Security.Check を使用します。メソッドの実行を試行するユーザが ProtectedMethod:USE 特権を持っている場合、このメソッドは、正常に $Username の値を返します。ユーザがこの特権を持っていない場合、メソッドはエラーを返します。


ClassMethod ProtectedMethod() As %String
{ 
 if ($SYSTEM.Security.Check("ProtectedMethod","U"))
 {
  Return $Username
 }
 Else
 {
  Return "Error: Insufficient Privileges"
 }
}   

この例を使用する手順は次のとおりです。

  1. ProtectedMethodExample という名前の新しいロールを作成します。このロールに %Development:USE および %DB_USER:RW を与えます。

  2. ユーザを 1 人作成し、このユーザを ProtectedMethodExample ロールに追加します。

  3. ターミナルを開き、$SYSTEM.Security.Login を使用して、前の手順で作成したユーザとしてログインします。SecurityTutorial.AuthorizationExampleProtectedMethod メソッドの実行を試みます。このユーザはまだ ProtectedMethod:USE を持っていないため、このメソッドは "エラー: 不十分な権限" を返します。

    
    USER>Write $System.Security.Login("MyUser","MyUser")
    1
    USER>Write $Username,!,$Roles
    MyUser
    ProtectedMethodExample
    USER>Write ##class(SecurityTutorial.AuthorizationExample).ProtectedMethod()
    Error: Insufficient Privileges
    USER>
    
    
  4. ProtectedMethod という名前の新しいリソースを作成します。このリソースには、パブリック許可を割り当てません。ProtectedMethodExample ロールに ProtectedMethod:USE を与えます。

  5. さきほど作成した、ProtectedMethodExample ロールのメンバであるユーザとしてログインしている状態で、SecurityTutorial.AuthorizationExampleProtectedMethod を実行します。ここで、ユーザは ProtectedMethod:USE を持っているので、メソッドは True の分岐を実行し、$Username の値を返します。

    
    USER>Write ##class(SecurityTutorial.AuthorizationTests).ProtectedMethod()
    MyUser
         
    
Note:

$SYSTEM.Security.Check の詳細は、"プロセスの特権の確認" を参照してください。

FeedbackOpens in a new tab