17
とたに 2013 © Alfresco勉強会 Alfrescoの権限管理について 2013年5月9日 2013510日金曜日

20130509 alfresco study15permission

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: 20130509 alfresco study15permission

とたに

2013©

Alfresco勉強会Alfrescoの権限管理について

2013年5月9日

2013年5月10日金曜日

Page 2: 20130509 alfresco study15permission

2012.09.06 2012 ©

前口上

2

なんとなくは理解しているAlfrescoの権限管理●おおよその全体像は理解できている。

ただし、●権限をカスタマイズする方法●低レベルでの権限制御の仕組みについては普段あまり意識しないので理解できていない、人が(私も含めて)多い

いい機会なので、勉強会テーマとしてまとめてみました。

2013年5月10日金曜日

Page 3: 20130509 alfresco study15permission

2012.09.06 2012 ©

Alfrescoの権限イメージ

3

ユーザA

グループC

コーディネータ

共同作業者

コンシューマ

編集者

ユーザB

2013年5月10日金曜日

Page 4: 20130509 alfresco study15permission

2012.09.06 2012 ©

もう少しフォーマルなモデル

4

ユーザ

グループAuthority Node

ロール/Permission

親子継承

NodeAuthority ロール/Permission

ユーザA Cordinator

グループC Collaborator

ドメイン内での情報表現形式

ドメイン内の権限モデル

ACL(Access Control List)

ACE

親フォルダからの継承有無

2013年5月10日金曜日

Page 5: 20130509 alfresco study15permission

2012.09.06 2012 ©

ロールとPermission

5

ロールとPermissonは違うのか●Permissionをいくつかまとめたものがロール●ACLの中ではロールもPermissionもどちらも指定可能

ReadProperty

Write

Lock

Role A

2013年5月10日金曜日

Page 6: 20130509 alfresco study15permission

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日金曜日

Page 7: 20130509 alfresco study15permission

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日金曜日

Page 8: 20130509 alfresco study15permission

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日金曜日

Page 9: 20130509 alfresco study15permission

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日金曜日

Page 10: 20130509 alfresco study15permission

2012.09.06 2012 ©

Shareのロール

10

Shareのサイトロールとグループ

<Site>_SiteManager

<Site>_SiteCollaborator

<Site>_SiteContributor

<Site>_SiteConsumer

SiteManager

SiteCollaborator

SiteContributor

SiteConsumer

●sitePermissionDefinitions.xmlに定義●同名のグループがサイトごとに作られる

ロール グループ

2013年5月10日金曜日

Page 11: 20130509 alfresco study15permission

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日金曜日

Page 12: 20130509 alfresco study15permission

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日金曜日

Page 13: 20130509 alfresco study15permission

2012.09.06 2012 ©

おまけ(本当に話したかったこと)

13

ANDでの権限解決●たまに実現できるかどうかを質問される●もちろんデフォルトでは出来ない。●2つのグループ両方の所属しているメンバのみ、特定の権限が与えられる

グループOC グループManager

user1 user2 user3

2013年5月10日金曜日

Page 14: 20130509 alfresco study15permission

2012.09.06 2012 ©

おまけ(本当に話したかったこと)

14

デモ

2013年5月10日金曜日

Page 15: 20130509 alfresco study15permission

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日金曜日

Page 16: 20130509 alfresco study15permission

2012.09.06 2012 ©

おまけ(本当に話したかったこと)

16

モジュールのソースコード●https://github.com/to2y/AlfrescoIntersectionPermission

2013年5月10日金曜日

Page 17: 20130509 alfresco study15permission

2013年5月10日金曜日