문제

내 온라인 상점에서 사용자는 주문의 특정 속성 (예 : 청구 주소)을 변경할 수 있지만 다른 사람 (예 : 원산지 IP 주소)은 변경할 수 있습니다. 반면에 관리자는 수정할 수 있습니다. 모두 주문 속성.

주어지면, 어떻게 사용할 수 있습니까? :attr_accessible 주문 모델을 올바르게 보호하려면? 아니면 관리자가 사용하지 못하게 할 수있는 모든 속성에 액세스 할 수있는 모든 속성을 표시하기 위해 사용해야합니까? Order.update_attributes(params[:order]) 일반 사용자가 액세스 할 수있는 컨트롤러 작업에서?

도움이 되었습니까?

해결책

일반적으로, Att_Accessible은 당신이 찾고있는 도구가 아니며 Rails는 당신이 원하는 것을하는 내장 된 것과 함께 제공되지 않습니다.

모델에서 특정 속성을 업데이트 할 수있는 사람에 대한 세밀한 제어를 원한다면 다음과 같은 작업을 수행 할 수 있습니다.

class Order < ActiveRecord::Base
  def update_attributes_as_user(values, user)
    values.each do |attribute, value|
      # Update the attribute if the user is allowed to
      @order.send("#{attribute}=", value) if user.can_modify?(attribute)
    end
    save
  end
end

그러면 당신은 당신의 변화를 바꿀 수 있습니다 Order.update_attributes(params[:order]) 에게 Order.update_attributes_as_user(params[:order], current_user) 그리고 당신이 그것을 구현한다고 가정합니다 User#can_modify? 방법 올바른 경우에 true를 반환하는 방법은 작동해야합니다.

다른 팁

나는 같은 문제가 있었고 지금은이 보석을 사용하고 있습니다. http://github.com/dmitry/attr_accessible_block

쉽고 일부 생산 웹 사이트에서 사용됩니다.

예, 조치를 수정해야하므로 조치 내에서 권한이 확인됩니다. 부름 Order#update_attributes 일반 사용자는 작동하지 않습니다.

나는 당신이 찾고있는 것을 허용하는 역할 기반 인증 플러그인을 깔끔하게 할 수 없습니다. 이 플러그인은 모델이 아닌 컨트롤러에 혼합되어 있기 때문입니다. 그들은 또한 섞어 야합니다 ActiveRecord::Base 확인하려면 attr_accesible 등.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top