• Like
20130509 alfresco study15permission
Upcoming SlideShare
Loading in...5
×

20130509 alfresco study15permission

  • 677 views
Uploaded on

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

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

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
677
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
8
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. とたに2013©Alfresco勉強会Alfrescoの権限管理について2013年5月9日2013年5月10日金曜日
  • 2. 2012.09.06 2012©前口上2なんとなくは理解しているAlfrescoの権限管理●おおよその全体像は理解できている。ただし、●権限をカスタマイズする方法●低レベルでの権限制御の仕組みについては普段あまり意識しないので理解できていない、人が(私も含めて)多いいい機会なので、勉強会テーマとしてまとめてみました。2013年5月10日金曜日
  • 3. 2012.09.06 2012©Alfrescoの権限イメージ3ユーザAグループCコーディネータ共同作業者コンシューマ編集者ユーザB2013年5月10日金曜日
  • 4. 2012.09.06 2012©もう少しフォーマルなモデル4ユーザグループAuthority Nodeロール/Permission親子継承NodeAuthority ロール/PermissionユーザA CordinatorグループC Collaboratorドメイン内での情報表現形式ドメイン内の権限モデルACL(Access Control List)ACE親フォルダからの継承有無2013年5月10日金曜日
  • 5. 2012.09.06 2012©ロールとPermission5ロールとPermissonは違うのか●Permissionをいくつかまとめたものがロール●ACLの中ではロールもPermissionもどちらも指定可能ReadPropertyWriteLockRole A2013年5月10日金曜日
  • 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. 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. 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. 2012.09.06 2012©ロール間の関係9Coordinator allowFullControlCollaboratorEditor ContributorConsumersys:base AddChildrensys:base ReadPermissionssys:base Readsys:base Writecm:lockable Writesys:base ReadPermissions2013年5月10日金曜日
  • 10. 2012.09.06 2012©Shareのロール10Shareのサイトロールとグループ<Site>_SiteManager<Site>_SiteCollaborator<Site>_SiteContributor<Site>_SiteConsumerSiteManagerSiteCollaboratorSiteContributorSiteConsumer●sitePermissionDefinitions.xmlに定義●同名のグループがサイトごとに作られるロール グループ2013年5月10日金曜日
  • 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. 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. 2012.09.06 2012©おまけ(本当に話したかったこと)13ANDでの権限解決●たまに実現できるかどうかを質問される●もちろんデフォルトでは出来ない。●2つのグループ両方の所属しているメンバのみ、特定の権限が与えられるグループOC グループManageruser1 user2 user32013年5月10日金曜日
  • 14. 2012.09.06 2012©おまけ(本当に話したかったこと)14デモ2013年5月10日金曜日
  • 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. 2012.09.06 2012©おまけ(本当に話したかったこと)16モジュールのソースコード●https://github.com/to2y/AlfrescoIntersectionPermission2013年5月10日金曜日
  • 17. 2013年5月10日金曜日