2012-07-03 3 views
2

내 모델에 'admin'필드가 포함되어 있습니다.이 필드는 true 또는 false입니다. 악의적 인 사람이 우리의 컨트롤러를 속여서 사용자에게 '관리자'권한을 부여하는 것을 원하지 않기 때문에 'attr_accessible'에 있지 않습니다.attr_accessible을 우회하는 '올바른 방법'

내 모델에 관리자로 로그인 한 경우 관리자 권한을 설정하거나 삭제할 사용자 레코드를 업데이트 할 수 있기를 원합니다. 그래서 ... 관리자에 대한 attr_accessible의 부재는 내가 그렇게하지 못하게합니다.

아마도 올바른 방법이 아닙니다. 그러한 경우를 처리하는 올바른 방법은 무엇입니까? 감사!

답변

4

Rails 3.2에는 설명하는 것을 수행 할 수있는 기능이 추가되었습니다. 단순히 모델이 정의

attr_accessible accessible_attributes + [:admin], :as => :admin 

그리고 사용자가 ADMIN 특성을 할당 할 컨트롤러이 수행

User.new(params[:user], :as => :admin) 

또는

user.update_attributes(params[:user], :as => :admin) 

모든 속성을 그 전화 번호 앞에 :as => :admin 전화 번호는 :as => :admin 옵션을 지원하는 모든 활성 녹음 통화에 대한 액세스 가능 속성입니다.

해당 정의에서 accessible_attributes을 호출하지 않은 경우 여기에 정의 된 속성 만 액세스 할 수 있습니다.

+0

어째서 attr_accessible을 보호하려고하는 보안상의 구멍이 열리지 않습니까? 공격자가 해당 컨트롤러에 http를 가짜로 만들어 해당 필드를 업데이트 할 수 있기 때문입니다. 그렇지 않으면 설명하는 기능이 제대로 작동합니다. 내가 놓친 게 있니? – pitosalas

+0

해커가 관리자가 아닌 한 해당 컨트롤러에 HTTP를 넣을 수 없으므로 열리지 않습니다. 관리자가 아니고 * 컨트롤러에 권한 보호가있는 경우 (현재 세션이 관리자인지 확인) 허용되지 않습니다. 일반적인 업데이트는': as => : admin'을 사용하지 않기 때문에 관리자를 지정할 수 없습니다. –

관련 문제