Refmon
Refmon is an Elixir implementation of a reference monitor.
Installation
If available in Hex, the package can be installed
by adding refmon to your list of dependencies in mix.exs:
def deps do
[
{:refmon, "~> 0.1.0"}
]
endDocumentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/refmon.
Usage
カーネルへの組み込み
Refmon.validateマクロをアクセスする層に呼び出す。
例:
def some_access_function() do
validate("User1", "Target1", :read, nil)
|> case do
:deny -> raise PermissionError
:allow -> nil
end
endAdapterの実装
Refmon.Adapter ビヘイビアを実装する。
例:
defmodule MyApp.MyAdapter do
use Refmon.Adapter
def permission(subj, obj, acc, param) do
case {subj, obj, acc, param} do
{_, _, :use, "exclusive"} -> :deny
{"I", "my " <> _, _, _} -> :allow
{"he", "his " <> _, _, _} -> :allow
{"subj", "obj", _, _, _} -> :allow
_ -> :deny
end
end
endpermission は、アクセス主体 subj とターゲット obj, アクセスモード acc、 アクセスモードパラメータ param をパラメータとして呼び出されるので、許 可(:allow) か 禁止 (:deny) を返す。
permission の呼び出し結果は、Refmon 側でキャッシュされる。キャッシュを クリアするのは、アプリケーションモジュールの責任である。
subject が nil の場合、システム呼び出しとみなされ、permission は呼び出 されない。
Refmon を組み込むアプリケーションの config.exs に otp_app とアダプタモ ジュールを設定する。
config :refmon,
otp_app: :myapp,
adapter: MyApp.MyAdapterotp_app を設定することで、そのアプリケーションで定義しているアクセスモー ドの一覧を Refmon.subject() から取得することができるようになる