データへのアクセスをフィルタリングする強力な機能は、アプリケーションへの悪意あるアクセスを防ぐために不可欠です。
この機能は、データに対する特定のアクションを許可する権限を利用します。これらの権限は、ロールの形でユーザーに割り当てられ、認証時にSession オブジェクトに保存されます。
4D 20 R6 ではこの機能を強化され、セッション内の権限を検査できるようになりました。
詳細はこちらをご覧ください。
Sessionオブジェクトの新しい getPrivileges() 関数
例題を見てみましょう。
roles.jsonファイルには、次の設定がされています:
まず、simple 権限があります。
medium 権限があり、simple 権限を含みます。
Medium ロールには、medium 権限が割り当てられています。
{
"privileges": [
{
"privilege": "simple",
"includes": []
},
{
"privilege": "medium",
"includes": [
"simple"
]
}
],
"roles": [
{
"role": "Medium",
"privileges": [
"medium"
]
}
],
"permissions": {
"allowed": [] // 許可されたアクションはここで設定します
}
}
DataStoreクラスには、authentify() 関数が定義されており、指定されたロールの権限を Session に割り当てます。
exposed Function authentify($role : Text) : Text
Session.clearPrivileges()
Session.setPrivileges({roles: $role})
return "Authentication done with "+$role
DataStoreクラスには、getPrivileges() 関数も実装されています。この関数は、Session の権限を返します。
exposed Function getPrivileges() : Collection
return Session.getPrivileges()
Medium ロールを指定して authentify() 関数が呼び出された場合、getPrivileges() 関数は次を返します:
[
"simple",
"medium"
]
新しい /$info/privileges RESt API
セッションの権限を取得するための新しい REST API も追加されました。上記の例で /$info/privileges を呼び出すと、以下を返します:
{
"privileges": [
{
"privilege": "simple"
},
{
"privilege": "medium"
}
]
}
これはデバッグを容易にします。詳しくはドキュメントを参照ください。