Upload
takeshi-totani
View
814
Download
1
Embed Size (px)
DESCRIPTION
Alfrescoの権限管理の特に低レベル部分について解説してみました。
Citation preview
とたに
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
親子継承
NodeAuthority ロール/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 Writesys: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日金曜日