ACL(アクセス制御リスト)
ACLを構成する要素
利用者の役割を表す。
ツリー構造を持つことでロールの階層関係を表現できる。
使用される「物」を表す。
ツリー構造を持つことでリソースの階層関係を表現できる。
どの様な操作が可能かを表す。
「どのロール」が「どのリソース」に対して「どの様な権限」を持つかを表現する。ロール、リソース、権限の組み合わせになる。
リソース | ロール | 作成 | 読取 | 修正 | 削除 | 備考 |
---|---|---|---|---|---|---|
記事 | 管理者 | × | ○ | ○ | ○ | 管理者は記事を作成できないが、規約上まずい記事の修正、削除が可能。 |
記事 | 登録ユーザー | ○ | ○ | ○ | ○ | 登録ユーザーは記事に関する操作の全てが可能 |
記事 | 匿名ユーザー | × | ○ | × | × | 匿名ユーザーは記事を読むだけ |
コメント | 管理者 | ○ | ○ | ○ | ○ | 管理者からのコメント、を追加できる。 |
コメント | 登録ユーザー | ○ | ○ | ○ | ○ | 登録ユーザーはコメントに対してあらゆる操作が可能 |
コメント | 匿名ユーザー | ○ | ○ | × | × | 匿名ユーザーはコメントを書けるが、修正削除は出来ない |
ユーザーデザイン | 管理者 | × | ○ | ○ | ○ | 作成は出来ないが規約上問題のあるデザインの修正、削除が可能。 |
ユーザーデザイン | 登録ユーザー | ○ | ○ | ○ | ○ | 全てが可能 |
ユーザーデザイン | 匿名ユーザー | × | ○ | × | × | 匿名ユーザーは参照以外何も出来ない。 |
リソース | ロール | 作成 | 読取 | 修正 | 削除 | 備考 |
---|---|---|---|---|---|---|
販売情報 | 販売担当グループ | ○ | ○ | ○ | ○ | |
販売情報 | 在庫管理担当グループ | × | ○ | × | × | |
販売情報 | 商品管理担当グループ | × | ○ | × | × | |
販売先情報 | 販売担当グループ | × | ○ | × | × | |
販売先情報 | 販売担当 管理者 | ○ | ○ | ○ | ○ |
ユーザーが所属するロール全てについて対象リソースと権限に対し権限ルールを下の順序で検索し、該当するものを採用する。複数のルールが該当する場合「許可」を優先する。何も見つからない場合、「拒否」する。
CFW.Acl.AclFactoryからCFW.Acl.AccessControlのオブジェクトを受け取り使用する。
//最初にログインユーザーのロールを設定する。
CFW.Auth.AuthProvider auth = CFW.Auth.AuthProviderFactory.GetInstance();
//ログイン中のユーザー取得
CFW.Auth.User user = auth.GetAuthenticated();
//userに設定されているロールを取得
List<CFW.Acl.AclRole> roles = user.Roles;
//CFW.Acl.AccessControlのオブジェクトを取得
CFW.Acl.AccessControl acl = CFW.Acl.AclFactory.GetInstance();
//"blog"リソースの読取権限チェック
bool result = acl.IsAllowed("blog",AclPrivilege.Read,roles);
//"blog/entry"(ブログ記事)リソースの作成権限チェック
result = acl.IsAllowed("blog",AclPrivilege.Create,roles);
基本となるACL機能の実装。ACLデータの読み込み機能はないのでAddResource(),AddRule()を使用してデータを追加して使用する。
(C#のみ)基本的なACLデータをデータベースから読み込むACL機能の実装。初回使用時にACLデータを全て読み込みstaticな領域に保持する。
列名 | 型 | null | 主キー | 説明 |
---|---|---|---|---|
id | int | not null | ○ | このロールのID |
name | varchar(100) | × | × | このロールの名称。ロール検索に使用する。 |
left_side | int | ○ | × | (ツリーデータ操作用)子要素範囲の左端 |
right_side | int | ○ | × | (ツリーデータ操作用)子要素範囲の右端 |
description | varchar(100) | ○ | × | 説明を記述 |
列名 | 型 | null | 主キー | 説明 |
---|---|---|---|---|
id | int | × | ○ | このリソースのID |
name | varchar(100) | × | × | このリソースの名称。リソース検索に使用する。重複不可 |
left_side | int | ○ | × | (ツリーデータ操作用)子要素範囲の左端 |
right_side | int | ○ | × | (ツリーデータ操作用)子要素範囲の右端 |
description | varchar(100) | ○ | × | 説明を記述 |
列名 | 型 | null | 主キー | 説明 |
---|---|---|---|---|
id | int | × | ○ | このルールのID |
resource_id | int | × | × | 対象リソースID |
role_id | int | × | × | 対象ロールID |
_create | int | × | × | 作成権限 0:拒否 1:許可 |
_read | int | × | × | 読取権限 0:拒否 1:許可 |
_update | int | × | × | 更新権限 0:拒否 1:許可 |
_delete | int | × | × | 削除権限 0:拒否 1:許可 |
description | varchar(100) | ○ | × | 説明を記述 |
特に編集機能はないが、DbAclで使用するデータの編集は「AclEdit.exe」で可能