20130509 alfresco study15permission

1,150 views
1,036 views

Published on

Alfrescoの権限管理の特に低レベル部分について解説してみました。

Published in: Technology, News & Politics
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,150
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

20130509 alfresco study15permission

  1. 1. とたに2013©Alfresco勉強会Alfrescoの権限管理について2013年5月9日2013年5月10日金曜日
  2. 2. 2012.09.06 2012©前口上2なんとなくは理解しているAlfrescoの権限管理●おおよその全体像は理解できている。ただし、●権限をカスタマイズする方法●低レベルでの権限制御の仕組みについては普段あまり意識しないので理解できていない、人が(私も含めて)多いいい機会なので、勉強会テーマとしてまとめてみました。2013年5月10日金曜日
  3. 3. 2012.09.06 2012©Alfrescoの権限イメージ3ユーザAグループCコーディネータ共同作業者コンシューマ編集者ユーザB2013年5月10日金曜日
  4. 4. 2012.09.06 2012©もう少しフォーマルなモデル4ユーザグループAuthority Nodeロール/Permission親子継承NodeAuthority ロール/PermissionユーザA CordinatorグループC Collaboratorドメイン内での情報表現形式ドメイン内の権限モデルACL(Access Control List)ACE親フォルダからの継承有無2013年5月10日金曜日
  5. 5. 2012.09.06 2012©ロールとPermission5ロールとPermissonは違うのか●Permissionをいくつかまとめたものがロール●ACLの中ではロールもPermissionもどちらも指定可能ReadPropertyWriteLockRole A2013年5月10日金曜日
  6. 6. 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日金曜日
  7. 7. 2012.09.06 2012©permissionDefinitions.xml②7PermissionSetPermissionSettypePermissionGroup*●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日金曜日
  8. 8. 2012.09.06 2012©permissionDefinitions.xml③8定義されているPermissionSet...sys:basecm:cmobjectcm:contentcm:foldercm:ownablecm:lockableFullControl Read Write DeleteAdministrator Coordniator Contributor......Administrator Coordniator Contributor ...Administrator Coordniator Contributor ...TakeOwnership SetOwnerCheckOut CheckIn ...2013年5月10日金曜日
  9. 9. 2012.09.06 2012©ロール間の関係9Coordinator allowFullControlCollaboratorEditor ContributorConsumersys:base AddChildrensys:base ReadPermissionssys:base Readsys:base Writecm:lockable Writesys:base ReadPermissions2013年5月10日金曜日
  10. 10. 2012.09.06 2012©Shareのロール10Shareのサイトロールとグループ<Site>_SiteManager<Site>_SiteCollaborator<Site>_SiteContributor<Site>_SiteConsumerSiteManagerSiteCollaboratorSiteContributorSiteConsumer●sitePermissionDefinitions.xmlに定義●同名のグループがサイトごとに作られるロール グループ2013年5月10日金曜日
  11. 11. 2012.09.06 2012©低レベルの操作権限コントロール(1)11Acegi●Javaのパーミッション制御ライブラリ●ACL●Java Class Methodベースのセキュリティ●現Spring SecurityPermissionとのマッピング/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.ReadPropertiesorg.alfresco.service.cmr.repository.NodeService.createStore=ACL_METHOD.ROLE_ADMINISTRATORorg.alfresco.service.cmr.repository.NodeService.exists=ACL_ALLOWorg.alfresco.service.cmr.repository.NodeService.getNodeStatus=ACL_NODE.0.sys:base.ReadProperties...2013年5月10日金曜日
  12. 12. 2012.09.06 2012©低レベルの操作権限コントロール(2)12Permissionの種類ACL_NODE(AFTER_ACL_NODE)ACL_ALLOW/ACL_DENYACL_METHODPermissionDefinitions.xmlに定義されているノードタイプとPermissionGroupに対応AFTER_ACL_NODEは戻り値に対するチェック許可/拒否ACL_METHOD.ROLE_ADMINISTRATORのケースでのみ使用されている引数以下のPermissionを持つ場合にメソッド実行を許可2013年5月10日金曜日
  13. 13. 2012.09.06 2012©おまけ(本当に話したかったこと)13ANDでの権限解決●たまに実現できるかどうかを質問される●もちろんデフォルトでは出来ない。●2つのグループ両方の所属しているメンバのみ、特定の権限が与えられるグループOC グループManageruser1 user2 user32013年5月10日金曜日
  14. 14. 2012.09.06 2012©おまけ(本当に話したかったこと)14デモ2013年5月10日金曜日
  15. 15. 2012.09.06 2012©おまけ(本当に話したかったこと)15実現方法if (authorisations.contains(ace.getAuthority()) && granters.contains(ace.getPermission())){{return true;}}// Intersection customizeif ( 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#isGranted2013年5月10日金曜日
  16. 16. 2012.09.06 2012©おまけ(本当に話したかったこと)16モジュールのソースコード●https://github.com/to2y/AlfrescoIntersectionPermission2013年5月10日金曜日
  17. 17. 2013年5月10日金曜日

×