SlideShare ist ein Scribd-Unternehmen logo
1 von 17
Downloaden Sie, um offline zu lesen
とたに
2013©
Alfresco勉強会
Alfrescoの権限管理について
2013年5月9日
2013年5月10日金曜日
2012.09.06 2012©
前口上
2
なんとなくは理解しているAlfrescoの権限管理
●おおよその全体像は理解できている。
ただし、
●権限をカスタマイズする方法
●低レベルでの権限制御の仕組み
については普段あまり意識しないので理解できていない、人が
(私も含めて)多い
いい機会なので、勉強会テーマとしてまとめてみました。
2013年5月10日金曜日
2012.09.06 2012©
Alfrescoの権限イメージ
3
ユーザA
グループC
コーディネータ
共同作業者
コンシューマ
編集者
ユーザB
2013年5月10日金曜日
2012.09.06 2012©
もう少しフォーマルなモデル
4
ユーザ
グループ
Authority Node
ロール/Permission
親子継承
Node
Authority ロール/Permission
ユーザA Cordinator
グループC Collaborator
ドメイン内での情報表現形式
ドメイン内の権限モデル
ACL(Access Control List)
ACE
親フォルダからの継承有無
2013年5月10日金曜日
2012.09.06 2012©
ロールとPermission
5
ロールとPermissonは違うのか
●Permissionをいくつかまとめたものがロール
●ACLの中ではロールもPermissionもどちらも指定可能
ReadProperty
Write
Lock
Role A
2013年5月10日金曜日
2012.09.06 2012©
permissionDefinitions.xml①
6
●Permissonとロールを定義
PermissionGroup Permission
*
PermissionGroup
* 0..*
grantedTo
<permissionGroup name="Read" expose="true" allowFullControl="false">
<includePermissionGroup type="sys:base" permissionGroup="ReadProperties"/>
<includePermissionGroup type="sys:base" permissionGroup="ReadChildren"/>
<includePermissionGroup type="sys:base" permissionGroup="ReadContent"/>
</permissionGroup>
...
<permissionGroup name="ReadProperties" expose="true" allowFullControl="false" />
...
<permission name="_ReadProperties" expose="false" >
<grantedToGroup permissionGroup="ReadProperties" />
<requiredPermission on="parent" name="_ReadChildren" implies="false"/>
</permission>
2013年5月10日金曜日
2012.09.06 2012©
permissionDefinitions.xml②
7
PermissionSet
PermissionSet
type
PermissionGroup*
●typeにはノードタイプが指定されている。
●cm:cmobjectのPermissionSet以下にロールに相当するCoordinatorや
CollaboratorのPermissionGroupが定義されている。
<permissionSet type="cm:cmobject" expose="selected">
<permissionGroup name="Administrator" allowFullControl="true" expose="false" /
>
<permissionGroup name="Coordinator" allowFullControl="true" expose="true" />
<permissionGroup name="Collaborator" allowFullControl="false" expose="true">
<includePermissionGroup permissionGroup="Editor" type="cm:cmobject" />
<includePermissionGroup permissionGroup="Contributor" type="cm:cmobject" />
</permissionGroup>
2013年5月10日金曜日
2012.09.06 2012©
permissionDefinitions.xml③
8
定義されているPermissionSet
...
sys:base
cm:cmobject
cm:content
cm:folder
cm:ownable
cm:lockable
FullControl Read Write Delete
Administrator Coordniator Contributor
...
...
Administrator Coordniator Contributor ...
Administrator Coordniator Contributor ...
TakeOwnership SetOwner
CheckOut CheckIn ...
2013年5月10日金曜日
2012.09.06 2012©
ロール間の関係
9
Coordinator allowFullControl
Collaborator
Editor Contributor
Consumer
sys:base AddChildren
sys:base ReadPermissions
sys:base Read
sys:base Write
cm:lockable Write
sys:base ReadPermissions
2013年5月10日金曜日
2012.09.06 2012©
Shareのロール
10
Shareのサイトロールとグループ
<Site>_SiteManager
<Site>_SiteCollaborator
<Site>_SiteContributor
<Site>_SiteConsumer
SiteManager
SiteCollaborator
SiteContributor
SiteConsumer
●sitePermissionDefinitions.xmlに定義
●同名のグループがサイトごとに作られる
ロール グループ
2013年5月10日金曜日
2012.09.06 2012©
低レベルの操作権限コントロール(1)
11
Acegi
●Javaのパーミッション制御ライブラリ
●ACL
●Java Class Methodベースのセキュリティ
●現Spring Security
Permissionとのマッピング
/alfresco/WEB-INF/classes/alfresco/public-services-security-context.xml
<bean id="NodeService_security"
class="org.alfresco.repo.security.permissions.impl.acegi.MethodSecurityInterceptor">
<property name="authenticationManager"><ref bean="authenticationManager"/></property>
<property name="accessDecisionManager"><ref local="accessDecisionManager"/></property>
<property name="afterInvocationManager"><ref local="afterInvocationManager"/></property>
<property name="objectDefinitionSource">
<value>
org.alfresco.service.cmr.repository.NodeService.getStores=ACL_ALLOW,AFTER_ACL_NODE.sys:base.ReadProperties
org.alfresco.service.cmr.repository.NodeService.createStore=ACL_METHOD.ROLE_ADMINISTRATOR
org.alfresco.service.cmr.repository.NodeService.exists=ACL_ALLOW
org.alfresco.service.cmr.repository.NodeService.getNodeStatus=ACL_NODE.
0.sys:base.ReadProperties
...
2013年5月10日金曜日
2012.09.06 2012©
低レベルの操作権限コントロール(2)
12
Permissionの種類
ACL_NODE
(AFTER_ACL_NODE)
ACL_ALLOW/ACL_DENY
ACL_METHOD
PermissionDefinitions.xmlに定義されている
ノードタイプとPermissionGroupに対応
AFTER_ACL_NODEは戻り値に対するチェック
許可/拒否
ACL_METHOD.ROLE_ADMINISTRATOR
のケースでのみ使用されている
引数以下のPermissionを持つ場合にメソッド実行を
許可
2013年5月10日金曜日
2012.09.06 2012©
おまけ(本当に話したかったこと)
13
ANDでの権限解決
●たまに実現できるかどうかを質問される
●もちろんデフォルトでは出来ない。
●2つのグループ両方の所属しているメンバのみ、特定の権限が与えられる
グループOC グループManager
user1 user2 user3
2013年5月10日金曜日
2012.09.06 2012©
おまけ(本当に話したかったこと)
14
デモ
2013年5月10日金曜日
2012.09.06 2012©
おまけ(本当に話したかったこと)
15
実現方法
if (authorisations.contains(ace.getAuthority()) && granters.contains(ace.getPermission()))
{
{
return true;
}
}
// Intersection customize
if ( ace.getAuthority().startsWith("AND(")) {
	 //System.out.println("## ace.getAuthority: " + ace.getAuthority());
	 Pattern p = Pattern.compile("AND((.*), (.*))");
	 Matcher matcher = p.matcher(ace.getAuthority());
	 matcher.find();
	 String auth1 = matcher.group(1);
	 String auth2 = matcher.group(2);
	
	 //System.out.println("## auth1: " + auth1);
	 //System.out.println("## auth2: " + auth2);
	
	 if (authorisations.contains(auth1) && authorisations.contains(auth2) &&
	 	 	 granters.contains(ace.getPermission()) ) {
	 	 return true;
	 }
}
IntersectPermissionService#AclTest#isGranted
2013年5月10日金曜日
2012.09.06 2012©
おまけ(本当に話したかったこと)
16
モジュールのソースコード
●https://github.com/to2y/AlfrescoIntersectionPermission
2013年5月10日金曜日
2013年5月10日金曜日

Weitere ähnliche Inhalte

Mehr von Takeshi Totani

20140129 alfresco addons
20140129 alfresco addons20140129 alfresco addons
20140129 alfresco addonsTakeshi Totani
 
Alfresco onlineeditbywebdav 2013
Alfresco onlineeditbywebdav 2013Alfresco onlineeditbywebdav 2013
Alfresco onlineeditbywebdav 2013Takeshi Totani
 
20130925 alfresco study18performancetuning
20130925 alfresco study18performancetuning20130925 alfresco study18performancetuning
20130925 alfresco study18performancetuningTakeshi Totani
 
20130801 alfresco study17customizemap
20130801 alfresco study17customizemap20130801 alfresco study17customizemap
20130801 alfresco study17customizemapTakeshi Totani
 
20130606 alfresco study16audit
20130606 alfresco study16audit20130606 alfresco study16audit
20130606 alfresco study16auditTakeshi Totani
 
JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発
JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発
JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発Takeshi Totani
 
第7回Alfresco勉強会資料 カスタムのオンライン編集
第7回Alfresco勉強会資料 カスタムのオンライン編集第7回Alfresco勉強会資料 カスタムのオンライン編集
第7回Alfresco勉強会資料 カスタムのオンライン編集Takeshi Totani
 
Alfresco study3 alfresco4
Alfresco study3 alfresco4Alfresco study3 alfresco4
Alfresco study3 alfresco4Takeshi Totani
 

Mehr von Takeshi Totani (8)

20140129 alfresco addons
20140129 alfresco addons20140129 alfresco addons
20140129 alfresco addons
 
Alfresco onlineeditbywebdav 2013
Alfresco onlineeditbywebdav 2013Alfresco onlineeditbywebdav 2013
Alfresco onlineeditbywebdav 2013
 
20130925 alfresco study18performancetuning
20130925 alfresco study18performancetuning20130925 alfresco study18performancetuning
20130925 alfresco study18performancetuning
 
20130801 alfresco study17customizemap
20130801 alfresco study17customizemap20130801 alfresco study17customizemap
20130801 alfresco study17customizemap
 
20130606 alfresco study16audit
20130606 alfresco study16audit20130606 alfresco study16audit
20130606 alfresco study16audit
 
JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発
JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発
JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発
 
第7回Alfresco勉強会資料 カスタムのオンライン編集
第7回Alfresco勉強会資料 カスタムのオンライン編集第7回Alfresco勉強会資料 カスタムのオンライン編集
第7回Alfresco勉強会資料 カスタムのオンライン編集
 
Alfresco study3 alfresco4
Alfresco study3 alfresco4Alfresco study3 alfresco4
Alfresco study3 alfresco4
 

20130509 alfresco study15permission