2010-07-05 4 views
1

각 사용자가 다른 필드를 편집 할 수있는 단일 양식을 표시하고 싶습니다.레일 : 사용자 권한에 따라 편집 가능한/편집 할 수없는 필드

현재 코드는 다음과 같습니다

<% if can? :update, item %> 
` <%= f.text_field :title %> 
<% else %> 
    <%=h f.object.title %> 
<% end %> 

내가 헬퍼의 시리즈 (각 필드 유형에 대해 하나)이 패키지 할 수 있습니다하지만 또한 사용자가 모든 업데이트 할 수 있는지 여부를 컨트롤러에 확인해야 제출 된 입력란 (악의적 인 사용자가 승인되지 않은 입력란을 제출하려는 경우)

이 유형의 작업을 위해 레일에 깨끗한 패턴이 있습니까? 이상적으로는 모델에서 이러한 액세스 권한을 정의하고 변경 내용을 컨트롤러 및 뷰에 전파하고 싶습니다.

편집 : readonly 태그를 사용하여이

실행 가능한 옵션이 아니다; 검증을 처리하지 않고 뷰 로직을 많은 CSS로 대체합니다. 최고의 절충안이 아닙니다.

답변

0

당신은 그들에게 읽기 전용

<%= f.text_field :title, :readonly=> (can? :update, item)? true : false %> 
+0

그것은 그냥 화장품; CSS를 많이 쓰는 것을 선호하는지 (읽기 전용 컨트롤을 일반 텍스트처럼 스타일을 지정하기 위해) 선호하는지 또는보기에서 일부 추가 로직을 선호하는지에 따라 다릅니다. 그리고 컨트롤러 쪽 유효성 검사 문제는 해결하지 않습니다. – shmichael

0

권한 부여에 대한 acl9 플러그인을 살펴보십시오 수 있습니다.

+0

필자가 볼 수있는 한, 선언적 승인이나 cancan과 다르지 않다. 컨트롤러/뷰에 다양한 로직을 구현해야한다. – shmichael

+0

예. 이미 자동 화 프레임 워크를 사용하고 있다는 것을 깨달았습니다. 나는 컨트롤러에서 상태 체크를 피할 수 없다고 생각한다. –

0

나는 믿지 말아은 플러그인이 문제를 해결 할 수있는 방법을 프로그래머, 옵션 만에 컨트롤러 코드를 변경하는 것입니다 :

@model=Model.new 
@model.field = params[:model][:field] if can? .... 
@model.save 
관련 문제