블로그 이미지
올해목표 // 10월 어학연수 떠나자~ 자수씨

카테고리

전체글 (1457)
Brand New! (28)
주절주절 (213)
MOT (11)
해외쇼핑 (49)
쇼핑노트 (150)
취미생활 (94)
iPhone (4)
Eclipse (121)
Google (83)
Spring (31)
JAVA (176)
Ant (2)
Maven (29)
iBATIS (7)
Regular Expression (6)
Java Web Start (4)
WebServices (14)
JAXB (12)
CAS (13)
JBoss Seam (6)
OSGi (1)
Hibernate (2)
James (6)
Alfresco (17)
JavaScript (59)
WEB (49)
Database (20)
OS (26)
Tools (8)
Tips (26)
IT정보 (1)
Book (21)
Programming (37)
외부행사 (43)
주변인들 (17)
여행노트 (60)
학교생활 (30)
회사생활 (52)
사회생활 (5)
외국어공부 (12)
잡동사니 (30)
Total
Today
Yesterday
 
04-17 10:14
 

달력

« » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
 

최근에 올라온 글

최근에 달린 댓글

기본 퍼미션 모델

JAVA/Alfresco / 2014. 1. 27. 18:43

마찬가지로 개인 참고용으로 정리합니다.

참고자료: https://wiki.alfresco.com/wiki/Default_Permissions_Model_Reference#Base_permissions

sys:base

기본 퍼미션

  • _ReadProperties: 노드의 속성 읽기에 대한 접근을 제한. 컨텐츠 접근은 개별적으로 제어됨. 모든 속성은 동일한 접근 제한을 가짐.
  • _ReadChildren: 자식 노드의 읽기에 대한 접근을 제한. 개별 자식 노드에 설정된 권한이 우선 적용됨. 이 권한이 부여되지 않으면 자식노드를 탐색할 수 없음.
  • _WriteProperties: 노드의 모든 속성에 대한 쓰기에 대한 접근을 제한. 컨텐츠 접근은 개별적으로 제어됨. 모든 속성은 동일한 접근 제한을 가짐
  • _ReadContent: 노드에 대한 모든 컨텐츠의 읽기에 대한 접근을 제한
  • _WriteContent: 노드에 대한 모든 컨텐츠의 생성과 갱신에 대한 접근을 제한
  • _ExecuteContent: 컨텐츠 실행에 대한 접근을 제한
  • _DeleteNode: 노드 삭제에 대한 접근을 제한. 현재 노드의 모든 자식 노드를 삭제할 권한을 가지거나 부모로 부터 자식 노드를 삭제할 수 있는지를 체크하지 않음.
  • _DeleteChildren: 자식 노드의 삭제에 대한 접근을 제한
  • _CreateChildren: 새로운 자식 노드 생성에 대한 접근을 제한
  • _LinkChildren: 이미 존재하는 노드에 보조 어소시에이션 생성에 대한 접근을 제한
  • _DeleteAssociations: 노드에 대한 non-child-associations 삭제에 대한 접근을 제한
  • _ReadAssociations: 노드에 대한 non-child-associations 읽기에 대한 접근을 제한
  • _CreateAssociations: 노드에 대한 non-child-associations 생성에 대한 접근을 제한
  • _ReadPermissions: 노드에서 읽기 권한에 대한 접근을 제한
  • _ChangePermissions: 노드에서 쓰기 권한에 대한 접근을 제한

기본 그룹

  • FullControl: 다른 모든 권한을 허용하는 권한 그룹
  • ReadProperties: _ReadProperties 에서 부여됨
  • ReadChildren: _ReadChildren 에서 부여됨
  • WriteProperties: _WriteProperties 에서 부여됨
  • ReadContent: _ReadContent 에서 부여됨
  • WriteContent: _WriteContent 에서 부여됨
  • ExecuteContent: _ExecuteContent 에서 부여됨
  • DeleteNode: _DeleteNode 에서 부여됨
  • DeleteChildren: _DeleteChildren 에서 부여됨
  • CreateChildren: _CreateChildren 에서 부여됨
  • LinkChildren: _LinkChildren 에서 부여됨
  • DeleteAssociations: _DeleteAssociations 에서 부여됨
  • ReadAssociations: _ReadAssociations 에서 부여됨
  • CreateAssociations: _CreateAssociations 에서 부여됨
  • ReadPermissions: _ReadPermissions 에서 부여됨
  • ChangePermissions: _ChangePermissions 에서 부여됨

복합 그룹

  • Read: ReadProperties, ReadChildren, ReadContent 의 조합
  • Write (Update in CRUD): WriteProperties 와 WriteContent 의 조합
  • Delete: DeleteNode 와 DeleteChildren 의 조합
  • AddChildren (Create in CRUD): CreateChildren 과 LinkChildren 의 조합
  • Execute: 그냥 ExecuteContent

cm:object

복합 그룹

  • Administrator: 모든 권한을 갖음. 이전 버전과의 호환성을 위해...
  • Coordinator: 모든 권한과 정의된 권한 그룹을 가져옴
  • Collaborator: Editor 와 Contributor 권한의 조합
  • Contributor: Consumer 권한 그룹에 AddChildren과 CheckOut 이 추가됨. 기본적으로 자신이 만든 것을 소유하고 ROLE_OWNER 권한이 있어야 함
  • Editor: Consumer 권한 그룹에 Write 와 CheckOut 이 추가됨
  • Consumer: Read 를 포함
  • RecordAdministrator: ReadProperties, ReadChildren, WriteProperties, ReadContent, DeleteChildren, CreateChildren, LinkChildren, DeleteAssociations, CreateAssociations 를 포함

cm:folder

복합 그룹

  • cm:object 와 유사. Administrator 권한 그룹만 없음

cm:ownable

기본 권한

  • _SetOwner: 노드에서 권한 설정을 제한. 이 권한은 _WriteProperties 도 부여해야 함.

기본 그룹

  • SetOwner: _SetOwner 에서 부여됨

복합 그룹

  • TakeOwnership: SetOwner 를 포함

cm:lockable

기본 권한

  • _Lock: 노드 잠금에 대한 접근을 제한
  • _Unlock: 노드 잠금 해제에 대한 접근을 제한

기본 그룹

  • Lock: _Lock 에서 부여됨
  • Unlock: _Unlock 에서 부여됨

복합 그룹

  • CheckOut: Lock 을 포함
  • CheckIn: Unlock 을 포함
  • CancelCheckOut: Unlock 을 포함


전역 권한

  • "FullControl" 은 "ROLE_ADMINISTRATOR" 에 부여됨: 관리자는 어떤 것도 할 수 있음
  • "FullControl" 은 "ROLE_OWNER" 에 부여됨: 소유자는 모든 권한이 허용됨
  • "Unlock" 은 "ROLE_LOCK_OWNER" 에 부여됨: 잠금의 소유자는 언제든지 잠금을 풀 수 있음
  • "CheckIn" 은 "ROLE_LOCK_OWNER" 에 부여됨: 잠금의 소유자는 문서를 체크인 할 수 있음
  • "CancelCheckOut" 은 "ROLE_LOCK_OWNER" 에 부여됨: 잠금의 소유자는 문서의 체크아웃을 취소할 수 있음



Posted by 자수씨
, |

개인적인 정리용으로...

출처: http://wiki.alfresco.com/wiki/Web_Scripts


기본


  • shortname: 사람이 읽을 수 있는 Web Script 이름
  • description (선택적인): Web Script 설명
  • url (하나 혹은 여러 개): Web Script가 바인딩되는 URI 템플릿.
  • format (선택적인): 응답의 content-type URI를 통해 어떻게 지정할 수 있는지를 제어
    • argument 는 query string 파라미터로 content-type 을 지정
      • ex) /helloworld?to=dave&format=xml
    • extension 은 URI extension 으로 content-type 을 지정
      • ex) /hello/world.xml?to=dave
    • any 는 위의 둘 중 하나가 사용될 수 있음
    • 지정되지 않으면 기본 값은 any 로 설정
  • authentication (선택적인): 인증 레벨이 필요할 경우 사용
    • none 은 인증이 필요 없음을 지정
    • guest 은 최소한 guest 인증을 필요로 함
    • user 는 최소한 지정된 사용자 인증을 필요로 함
    • admin 은 최소한 지정된 관리자 인증을 필요로 함


확장


  • transaction (선택적인): 트랜잭션 레벨을 지정
    • none 은 트랜잭션이 필요 없음을 지정
    • required 는 트랜잭션이 필요함을 지정
    • requiresnew 는 새로운 트랜잭션이 필요함을 지정
    • 지정되지 않으면 기본 값은 none 으로 설정
  • family (선택적인): 유사하거나 관련이 있는 web scripts 들을 분류하기 위한 태그
  • cache (선택적인): 캐싱 레벨을 지정
    • never (선택적인): 캐싱을 모두 적용해야 하는지 여부를 지정
      • true (기본 값) 는 web script 의 응답이 캐시되지 않음을 지정
      • false 는 web script 의 응답이 캐시할 수 있음을 지정
    • public (선택적인): 인증 응답이 공개 캐시에 캐시해야 하는지 여부를 지정
      • true (기본 값) / false
    • mustrevalidate (선택적인): 캐시가 freshness 를 보장하기 위해 web scritp 응답의 버전을 재검증해야 하는지 여부를 지정
      • true (기본 값) / false
  • negotiate (0개 이상): Accept 헤더 MIME-type 과 응답의 특정 web script 형식의 연관
  • kind (선택적인): web script 의 종류 재정의를 위한 식별
  • lifecycle (선택적인): web script 의 라이프사이클을 지정
    • none 은 web script 가 라이프사이클의 일부가 아님을 지정
    • sample 은 web script 가 샘플로 만들어졌으며, 제품으로 사용하지 않음을 지정
    • draft 는 web script 가 실험 중이거나 변경/정지 될 수 있음을 지정
    • public_api 는 Alfresco 의 공개 API 이며, 안정적이고 잘 테스트되었음을 지정
    • draft_public_api 는 공개 API가 될 것이지만, 실험 중이거나 변경/정지 될 수 있음을 지정
    • deprecated 는 향후 버전에서 제거될 수 있으니 사용을 피하도록 함을 지정
    • internal 은 Alfresco 내부에서만 사용됨을 지정




Posted by 자수씨
, |

/share/site_index.jsp

JAVA/Alfresco / 2013. 12. 10. 11:57


Presets에 정의된 컴포넌트가 생성되는 시점을 못찾아서 삽질을 했었는데, 드디어 발견했다.


[installLocation]\tomcat\webapps\share\sire_index.jsp

<%@ page import="org.alfresco.web.site.*" %>

<%@ page import="org.springframework.extensions.surf.*" %>

<%@ page import="org.springframework.extensions.surf.site.*" %>

<%@ page import="org.springframework.extensions.surf.util.*" %>

<%@ page import="java.util.*" %>

<%

   // retrieve user name from the session

   String userid = (String)session.getAttribute(SlingshotUserFactory.SESSION_ATTRIBUTE_KEY_USER_ID);

   

   // test user dashboard page exists?

   RequestContext context = (RequestContext)request.getAttribute(RequestContext.ATTR_REQUEST_CONTEXT);

   if (context.getObjectService().getPage("user/" + userid + "/dashboard") == null)

   {

      // no user dashboard page found! create initial dashboard for this user...

      Map<String, String> tokens = new HashMap<String, String>();

      tokens.put("userid", userid);

      FrameworkUtil.getServiceRegistry().getPresetsManager().constructPreset("user-dashboard", tokens);

   }

   

   // redirect to site or user dashboard as appropriate

   String siteName = request.getParameter("site");

   if (siteName == null || siteName.length() == 0)

   {

      // forward to user specific dashboard page

      response.sendRedirect(request.getContextPath() + "/page/user/" + URLEncoder.encode(userid) + "/dashboard");

   }

   else

   {

      // forward to site specific dashboard page

      response.sendRedirect(request.getContextPath() + "/page/site/" + URLEncoder.encode(siteName) + "/dashboard");

   }

%>



위의 소스에서 수행하는 작업은 "userid"를 세션에서 조회하여 해당 페이지가 존재하는지를 체크하고 없다면 "PresetsManager"를 통해서 "preset"를 구성한다. 그 후, 해당 페이지로 리다이렉트,,,


가장 중요한건 FrameworkUtil.getServiceRegistry().getPresetsManager().constructPreset("user-dashboard", tokens); 를 발견했다거...




Posted by 자수씨
, |

Spring Surf Presets

JAVA/Alfresco / 2013. 12. 10. 11:51

http://blogs.alfresco.com/wp/developer/2011/11/01/spring-surf-presets/ 를 이해한대로 정리해봅니다.

배경

대시보드와 같이 사용자 별로 유니크한 페이지에서 사용자가 최초로 접속할 때 생성되어야 하는 것들은 "presets"을 이용한다.


Presets는 "spring-surf-presets-context.xml"에 "org.springframework.extensions.surf.PresetsManager" 클래스를 통해 관리된다.


기본적으로 "presets.xml" 는 "classes/alfresco/site-data/presets" 이나 "classes/alfresco/web-extension/site-data/presets" 에 위치한다. 기본적인 구조는 아래와 같다.


Presets 예시

PresetsManager 빈은 "constructPresets" 메소드를 호출하여 Presets 환경을 설정한다. 다른 방법으로는 custom Spring Surf JSP 태그를 이용하는 것이다. 이 방법은 아래와 같이 사용할 수 있다.


preset은 다수의 인스턴스를 생성하기 원하는 objects를 초기 정의 시에만 제공되어 진다. 


"source-id" 속성을 정의하여 컴포넌트의 scope를 설정할 수 있다.


Presets Manager 대안

Presets Manager를 커스터마이징 하기를 원한다면 Spring Surf FVT application을 사용한다.


"PresetsManager"는 "ModelObjects"를 생성하고 저장하는 "ModelObjectService"를 필요로 한다. 기본적으로 "PresetsManager"는 로컬 파일 시스템에 접근하는 것이 포함되어 있지 않은 "MultiObjectServer"를 사용한다. "ModelObjectService"는 "Store"를 필요로 하는 "Persister"를 필요로 하는 "PersisterService"를 필요로 한다.


기본 "PresetsManager"를 오버라이드하고 "ModelObjectService"가 참조되기를 보장한다.


마지막으로 새로운 persist를 사용할 수 있도록 추가하는 기본 "Autowire" 서비스를 오버라이드 한다.



흠... 일단은 뭔말인지는 알겠음...


Posted by 자수씨
, |


이클립스에서 m2e 플러그인을 사용할 경우, 알프레스코 플러그인이 아래와 같이 빨간 빛을 내는 경우가 있습니다.


Plugin execution not covered by lifecycle configuration: org.alfresco.maven.plugin:alfresco-maven-plugin:1.0.2:set-version (execution: default-set-version, phase: initialize)



컴파일에는 문제가 생기지 않지만 빨간 엑스박스가 자꾸 눈에 걸립니다...


m2e 위키에서는 다음과 같은 방법을 제안합니다. 읽어보시고 더 좋은 방안이 있으시면,,, 공유 좀,,,

(http://wiki.eclipse.org/M2E_plugin_execution_not_covered)


하지만 귀찮으니 걍 "Mark goal set-version as ignored in Eclipse build in Eclipse preference..." 를 클릭하여 에러를 무시합니다.




해당 설정은 프로젝트 properties 에 "Maven > Lifecycle Mapping" 에서 확인할 수 있습니다.



빨간불 끄는 것도 일이네요,,,



Posted by 자수씨
, |

알프레스코를 기반으로 제품을 만들기 위해서는 커스터마이징이 필요하다.


이번 포스팅에서는 header 영역에 외부 링크를 연결시키는 방법을 연구해보았다.







 

참고자료



Posted by 자수씨
, |

출처: http://docs.alfresco.com/4.1/index.jsp?topic=%2Fcom.alfresco.enterprise.doc%2Ftasks%2Fmysql-config.html


1. MySQL database connector 설치

MySQL database connector 는 MySQL 을 사용하는 Alfresco 설치 시에 필요합니다. database connector 는 MySQL database 가 Alfresco 서버와 talk 하는 것을 허용합니다.(-ㅁ-,,,)

a. MySQL download site (http://dev.mysql.com/) 에서 mysql-connector-java-5.x.x-bin.jar 를 다운받습니다.

b. Tomcat 라이브러리 디렉토리 (<TOMCAT_HOME>/lib) 에 JAR 파일을 복사합니다.


2. "alfresco" 라는 이름의 데이터베이스를 생성합니다.

MySQL 과 non-US-ASCII 문자를 사용한다면, 인코딩 설정이 필요합니다. 데이터베이스는 반드시 "UTF-8" 문자셋과 "utf8_bin" collation 으로 만들어져야 합니다. JDBC URL 에 "?useUnicode=yes&characterEncoding=UTF-8" 파라미터를 사용해야 합니다.


3. "alfresco" 라는 이름으로 사용자를 생성합니다.


4. 패스워드도 "alfresco" 라고 설정합니다.


5. "<classpathRoot>/alfresco-global.properties.sample" 파일을 엽니다.


6. 해당 라인으로 이동합니다.

#dir.root=/srv/alfresco/alf_data


7. 기존의 경로에서 Alfresco 데이터가 저장되기 원하는 디렉토리로 변경합니다.

ex) dir.root=C:/Alfresco/alf_data


8. 다음 데이터베이스 설정을 변경합니다.

db.driver=org.gjt.mm.mysql.Driver

db.url=jdbc:mysql://${db.host}:${db.port}/${db.name}?useUnicode=yes&characterEncoding=UTF-8 


9. 다른 데이터베이스 설정을 변경합니다.

db.name=alfresco

db.username=alfresco

db.password=alfresco

db.host=localhost

db.port=3306

db.pool.max=40


10. (선택적...) 대소문자 구분을 활성화 시킬 수 있습니다.

기본적으로 Alfresco 는 대소문자 구분을 하지 않습니다. 데이터베이스가 대소문자 구분하기 원한다면, alfresco-global.properties 파일을 다음과 같이 수정합니다.

user.name.caseSensitive=true


11. .sample 확장자를 지우고 저장합니다. (alfresco-global.properties)


12. Alfresco 서버를 재시작합니다.

JDBC 에러가 발생한다면, MySQL JDBC 드라이버가 시스템 경로에 없거나, 애플리케이션 서버의 lib 디렉토리에 없을 때 발생합니다.




Posted by 자수씨
, |

글 보관함

최근에 받은 트랙백