2010-01-14 4 views
0

다음과 같은 데이터 액세스 API가 있습니다.데이터 영역에 대한 사용자 액세스 권한을 확인하기위한 좋은 설계입니까?

public interface IDataAccess { 
    void save(Doc doc); 
    Doc retrieve(DocId id); 
    void delete(Doc doc); 
} 

사용자가 권한에 따라 문서에서 수행 할 수있는 작업을 제한해야합니다. 필자가 수행해야만하는 생각은 데이터 액세스 작업을 미러링하는 다른 API를 만드는 것이었지만 작업을 수행하기 전에 사용자 자격 증명을 사용하여이를 확인했습니다.

public interface IAuthDataAccess { 

    // User is a previously authenticated user 
    void save(Doc doc, User user) throws SecurityException; 
    ... 
} 

public class AuthDataAccess implements IAuthDataAccess { 
    IAuth auth = ... 
    IDataAccess dataAccess = ... 

    public void save(Doc doc, User user) throws SecurityException { 
     if (auth.saveAllowed(doc, user)) { 
     dataAccess.save(doc); 
     } else { 
     throw new SecurityException("access denied"); 
     } 
    } 
    ... 
} 

IAuthDataAccess API를 사용하여 데이터에 액세스했습니다. 층. 데이터 액세스 레이어와 함께 인증/인증을 묶는 더 좋은 방법이 있습니까?

답변

1

더 나은 디자인은 코드에 aspect 프로그래밍을 통합하는 것입니다. 주석을 사용하면이 작업을 수행 할 수 있습니다.

예 :

public interface IAuthDataAccess { 

    @Restricted 
    void save(Doc doc, User user) throws SecurityException; 
    ... 
} 

는 물론, 당신은 실제 검사를 수행하는 다른 코드를 생성해야합니다.

2

실제로 메소드를 구현하지 않아서 인터페이스가 무의미 해집니다. 모두 혼동입니다. 인가 된 접근자가 실제로 인터페이스를 구현하는 것은 어떻습니까? 예 : 같은 -

public class AuthorizedDataAccessor implements IAuthDataAccess { 

public AuthorizedDataAccessor(User user){ .. } 

    void save(Doc doc) { ... save if authorized ...} 
} 

그래서 당신은 쓸 수

IAuthDataAccess a=new AuthorizedDataAccessor(user); 
a.save(doc); 
관련 문제