Package com.easydesk.web.service
Class ScreenAccessService
java.lang.Object
com.easydesk.web.service.ScreenAccessService
화면(Screen) 접근 권한 검사.
- 화면 이름으로 Screen Attribute 의 Option 을 찾고, 그 Option 의 Artifact(Item) 에 설정된
Permission Attribute 값을 읽는다 - "이 화면에 들어오려면 필요한 권한". (
findScreen(java.lang.String)) - SecurityContext 에 들어 있는 현재 사용자의 ACL 로 그 권한을 확인한다. (
decide(java.lang.String, boolean, java.util.List<java.lang.String>, com.easydesk.security.entity.Group, java.lang.Long))
- Permission 값이 없거나
None뿐이면 공개 화면이다 (로그인하지 않아도 허용). - 그 외의 화면은 로그인이 필요하다. 로그인하지 않았으면 LOGIN_REQUIRED.
DoNotAllowed가 있으면 누구도 허용하지 않는다.LoggedIn은 로그인만 되어 있으면 충족된다 (어느 Role 에도 부여하지 않는 값이라 ACL 로는 확인할 수 없다).- 나머지 Permission 은 ACL.hasPermission(null, group, permissions) 그대로 판단한다. 즉 대상 Group 에서 사용자가 가진 Role 중 하나가 그 Permission 들을 모두 가지고 있어야 한다. AnyPermission 도 특별 취급하지 않는다.
- EASYDESK_PERMISSION 에 없는 이름이 섞여 있으면 거부한다 (Permission Attribute 의 Option 으로만 있고 security Permission 으로 등록되지 않은 경우).
- DB 에 등록되지 않은 화면 이름은 LoggedIn 과 같게 취급한다.
- 검사 중 오류가 나면 허용하지 않는다 (fail closed).
- URL path 에 moduleId 가 있으면 그 Module 의 Group (Module id == Group id).
- 없으면 화면 Artifact 가 속한 Module 의 Group (현재 EASYDESK).
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription현재 요청의 사용자(SecurityContextHolder)가 화면에 접근할 수 있는지 검사한다.getRequiredPermissions(String screenName) 화면 접속에 필요한 Permission 이름들을 구한다.
-
Constructor Details
-
ScreenAccessService
public ScreenAccessService(@Qualifier("moduleSecurityService") SecurityService moduleSecurityService)
-
-
Method Details
-
getRequiredPermissions
화면 접속에 필요한 Permission 이름들을 구한다.- Parameters:
screenName- Screen Attribute 의 Option 이름- Returns:
- 화면 Artifact 에 설정된 Permission 이름들. 설정된 값이 없으면 빈 list,
등록되지 않은 화면이면
null - Throws:
TorqueException- 조회 중 오류가 발생한 경우
-
check
현재 요청의 사용자(SecurityContextHolder)가 화면에 접근할 수 있는지 검사한다.- Parameters:
screenName- Screen Attribute 의 Option 이름moduleId- URL path 의 moduleId. 없으면null- Returns:
- 검사 결과
-