2012-07-30 2 views
0

CanCan 1.6을 사용하는 Rails 3.1 앱이 있습니다. 나는 다양한 속성을 attr_protected ... :as => :api으로 보호하고 있습니다. load_and_authorize_resource을 사용하고 싶지만 보호 된 필드를 제거하고 싶습니다. 어떤 아이디어?레일 CanCan 및 Scoped attr_protected

편집 : 주문 # 새로운에서

, 내가 load_resource을 생략하고 바로 허가 해요 : 여기에 내 현재 해결 방법입니다.

@order.user = current_user 물론

하지 큰 거래를 할 것이 아니라, 단지시키는보다 우아한 :

@order = Order.new(params[:order], :as => :api) 그런 다음 사용자가 수동 설정 : 나는 적절한 범위로, 직접 새로운 질서를 초기화 CanCan은 내가 다른 곳에서하고있는 것처럼 기본적으로로드하고 권한을 부여합니다.

답변

0

일반적으로 제출할 보호 된 필드가 몇 개 밖에없는 경우 매개 변수 해시에서 값을 가져 와서 수동으로 할당하는 것이 더 쉽습니다.

##save the parameter and delete it from the hash 
role  = params[:employee][:role_id] 
params[:employee].delete("role_id") 

##create object and assign parameter manually 
@employee = Employee.new(params[:employee]) 
@employee.role_id = role 

많은 특성이있는 경우 수동 할당을 자동화 할 수 있습니다.

##list protected attributes and create new employee 
attr = Employee.protected_attributes ##["id", "type", "name"] 

@employee = Employee.new 

##loop through params and manually send value 
params[:employee].each do |p| 
    @employee.send("#{p}=", params[:employee]["#{p}"]) 
end 

두 번째 부분을 완전히 테스트 할 시간이 없지만 올바른 방향으로 가야합니다.

+0

통찰력을위한 감사합니다 Kosmonaut. 불행히도,이 솔루션은 중첩 된 리소스와 함께 작동하지 않습니다.이 경우에는 실제로 사용하고 있습니다. 위의 게시물을 현재 해결 방법으로 업데이트했지만 해결 방법보다 좀 더 우아한 것을 기대했습니다. 중첩이 아니라면 솔루션이 정상적으로 작동했을 것입니다. – ideaoforder