ACL(アクセス制御リスト)
acl | セクション名 |
providerClass | ACLプロバイダー実装クラス名 |
connection | ACLプロバイダーが使用するデータ接続の接続名称 |
CFW.Acl.DbAclを使用してデータベース上のACLデータを扱う設定
<dataAccess defaultConnectionTimeout="15" defaultCommandTimeout="45">
<add name="acl"
className="CFW.Database.SqlServer.SqlServerConnection,CFW.Database"
url="CRAFT-DACSERVER"
database="okada"
user="okada"
password="okada"
quoteStyle="0"
commandTimeout="15"
connectionTimeout="15"
encryptUser="false"
option=""
/>
</dataAccess>
<acl
providerClass="CFW.Acl.DbAcl,CFW.Acl"
connection="acl"
/>
ACLを構成する要素
利用者の役割を表す。
ツリー構造を持つことでロールの階層関係を表現できる。
使用される「物」を表す。
ツリー構造を持つことでリソースの階層関係を表現できる。
どの様な操作が可能かを表す。
「どのロール」が「どのリソース」に対して「どの様な権限」を持つかを表現する。ロール、リソース、権限の組み合わせになる。
リソース | ロール | 作成 | 読取 | 修正 | 削除 | 備考 |
---|---|---|---|---|---|---|
記事 | 管理者 | × | ○ | ○ | ○ | 管理者は記事を作成できないが、規約上まずい記事の修正、削除が可能。 |
記事 | 登録ユーザー | ○ | ○ | ○ | ○ | 登録ユーザーは記事に関する操作の全てが可能 |
記事 | 匿名ユーザー | × | ○ | × | × | 匿名ユーザーは記事を読むだけ |
コメント | 管理者 | ○ | ○ | ○ | ○ | 管理者からのコメント、を追加できる。 |
コメント | 登録ユーザー | ○ | ○ | ○ | ○ | 登録ユーザーはコメントに対してあらゆる操作が可能 |
コメント | 匿名ユーザー | ○ | ○ | × | × | 匿名ユーザーはコメントを書けるが、修正削除は出来ない |
ユーザーデザイン | 管理者 | × | ○ | ○ | ○ | 作成は出来ないが規約上問題のあるデザインの修正、削除が可能。 |
ユーザーデザイン | 登録ユーザー | ○ | ○ | ○ | ○ | 全てが可能 |
ユーザーデザイン | 匿名ユーザー | × | ○ | × | × | 匿名ユーザーは参照以外何も出来ない。 |
リソース | ロール | 作成 | 読取 | 修正 | 削除 | 備考 |
---|---|---|---|---|---|---|
販売情報 | 販売担当グループ | ○ | ○ | ○ | ○ | |
販売情報 | 在庫管理担当グループ | × | ○ | × | × | |
販売情報 | 商品管理担当グループ | × | ○ | × | × | |
販売先情報 | 販売担当グループ | × | ○ | × | × | |
販売先情報 | 販売担当 管理者 | ○ | ○ | ○ | ○ |
ユーザーが所属するロール全てについて対象リソースと権限に対し権限ルールを下の順序で検索し、該当するものを採用する。複数のルールが該当する場合「許可」を優先する。何も見つからない場合、「拒否」する。
上で生成した Message.Resources.dll(または別に生成したdll) を実行環境にコピーする。
asp.netであれば(asp.net仮想フォルダ)/bin、windowsアプリケーションであれば .exeと同じフォルダに配置。または(厳密名をつけた場合のみ)GACディレクトリ、app.config/system.runtime以下に設定したprobeパスに配置。
click onceアプリケーションの場合 Message.Resources.dllを マニフェストに含めなければならない。
CFW.Acl.AclFactoryからCFW.Acl.AccessControlのオブジェクトを受け取り使用する。
//最初にログインユーザーのロールを設定する。
CFW.Auth.AuthProvider auth = CFW.Auth.AuthProviderFactory.GetInstance();
//ログイン中のユーザー取得
CFW.Auth.User user = auth.GetAuthenticated();
//userに設定されているロールを取得
List 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()を使用してデータを追加して使用する。
基本的なACLデータをデータベースから読み込むACL機能の実装。初回使用時にACLデータを全て読み込みstaticな領域に保持する。
列名 | 型 | null | 主キー | 説明 |
---|---|---|---|---|
id | int | not null | ○ | このロールのID |
name | varchar(100) | × | ○ | このロールの名称。ロール検索に使用する。 |
parent_id | varchar(100) | × | × | このロールの親のID |
left_side | varchar(100) | ○ | × | (ツリーデータ操作用)子要素範囲の左端 |
right_side | varchar(100) | ○ | × | (ツリーデータ操作用)子要素範囲の右端 |
description | varchar(100) | ○ | × | 説明を記述 |
列名 | 型 | null | 主キー | 説明 |
---|---|---|---|---|
id | int | × | ○ | このリソースのID |
name | varchar(100) | × | ○ | このリソースの名称。リソース検索に使用する。重複不可 |
parent_id | varchar(100) | × | × | このロールの親のID |
left_side | varchar(100) | ○ | × | (ツリーデータ操作用)子要素範囲の左端 |
right_side | varchar(100) | ○ | × | (ツリーデータ操作用)子要素範囲の右端 |
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」で可能