2014-09-01 1 views
0

Struts 2, 스프링 보안 앱이 있습니다. JSP로 읽기 전용 필드를 만들 필요가있는 요구 사항이 있습니다. 로그인 한 사용자가 문서 작성자가 아닌 경우 문서를 편집 할 수 없어 정보를 볼 수 있습니다. 스트럿츠와 JSP를 사용하여 이것을 달성 할 수있는 방법이 있습니까? 아니면 읽고 편집하기 위해 다른 양식이 필요합니까?문서 생성을 기반으로 jsp 필드를 읽기 전용으로 만듭니다.

답변

1

정말 여러 가지 방법이 있습니다.

List<Document> documents; 가정 및 documentId, ownerId, description 같은 Document 객체 가진 필드 및 사용자 객체는 getCurrentUser()를 통해 어딘가에 저장, 접근 (예. 다른 사람에 의해 연장 BaseAction에서), 당신은 확인하실 수 있습니다 문서를 반복하면서 더 복잡한 검사를 수행 할 경우

<s:iterator value="allDocuments" var="currentDocument" status="stat"> 
    <s:hidden name="allDocuments[%{#stat.index}"].documentId /> 

    <s:if test="%{currentUser.id.equals(#currentDocument.ownerId)}"> 
     <s:textfield name="allDocuments[%{#stat.index}"].description" /> 
    </s:if> 
    <s:else> 
     <s:textfield name="allDocuments[%{#stat.index}"].description" 
       readonly="true" /> 
    </s:else> 
    <br/> 
</s:iterator> 

와 인라인, 당신은 액션 함수를 호출 할 수 있습니다 :

<s:iterator value="allDocuments" var="currentDocument" status="stat"> 
    <s:hidden name="allDocuments[%{#stat.index}"].documentId /> 

    <s:if test="%{amIOwnerOfThisDocument(#currentDocument.ownerId)}"> 
     <s:textfield name="allDocuments[%{#stat.index}"].description" /> 
    </s:if> 
    <s:else> 
     <s:textfield name="allDocuments[%{#stat.index}"].description" 
       readonly="true" /> 
    </s:else> 
    <br/> 
</s:iterator> 

및 조치 :

public boolean amIOwnerOfThisDocument(String ownerId){ 
    return getService().checkSomethingComplex(getCurrentUser().getId(),ownerId); 
} 

등등.

중요 : 악의적 인 사용자가 그에 의해 수정해서는 안 데이터 요청을 위조하는이 데이터를 JSP에서 수신받을 때 제어 서버 측의이 종류를 복제하는 것을 잊지 마세요 ... 그것은 간단합니다 예 : Firebug/Firefox 콘솔에서 readonly 속성을 제거하기 만하면됩니다.

1

이것은 현재 세션의 현재 사용자에 대한 식별 정보를 저장하고 있다고 가정합니다.

양식에 3 진수 연산자를 사용하여 readonly인지 확인하십시오. 이 같은 뭔가 : 현재 사용자가 문서를 작성한 것과 같은 경우

<input type="text" ... ${sessionScope.userId.equals(userIdOfTheCreator)?"":"readonly"}> 

다음 다른 그렇지 않으면 수행 readonly 속성을 추가하지 않습니다.

+0

사용자가 문서를 처음 만들 때 사용자 이름 (고유 필드)을 저장하는 문서에 createdBy 필드가 있습니다. 그리고 나는 JSP로 을 사용하고있다. – user3339592

+0

그렇다면 현재 사용자의 사용자 이름을 가져 와서 createdBy 필드와 비교하십시오. 위와 똑같습니다. – lxcky

관련 문제