나는 statemachine을 가진 모델을 가지고 있으며 다른 상태/이벤트/전환을 다른 사용자들에게 국한시키고 싶다.모델에서 cancan을 사용할 수 있습니까?
이 모델에서 현재 사용자와 능력에 액세스하려면 어떻게해야합니까?
나는 statemachine을 가진 모델을 가지고 있으며 다른 상태/이벤트/전환을 다른 사용자들에게 국한시키고 싶다.모델에서 cancan을 사용할 수 있습니까?
이 모델에서 현재 사용자와 능력에 액세스하려면 어떻게해야합니까?
모델에서 제공하는 모든 방법에 대해 cancan에서 능력을 정의 할 수 있습니다. 상태 머신 전환은 모델 자체에서 제공하는 메소드이므로 다른 방법과 마찬가지로 능력을 설정하십시오. 당신은 다음과 같은 능력을 정의 할 수 있습니다
class Order < ActiveRecord::Base
state_machine :initial => :new do
event :start_processing do
transition :new => :processing
end
event :complete_order do
transition :processing => :complete
end
event :escalate_order do
transition :processing => :escalated
end
event :complete_escalated_order
transition :escalated => :complete
end
state :new
state :processing
state :escalated
state :complete
end
end
: 간단한 모델 주어진 예를 들어
,
class Ability
if user.role? :orderer
can [:start_processing, :escalate_order, :complete_order], :orders
end
if user.role? :manager
can :complete_escalated_order, :orders
end
end
편집 - 당신이 다음 컨트롤러에서이 능력을 사용할 것이라는 점을, 추가한다 처리 사용자 요청 :
class OrdersController < ApplicationController
def complete
@order = Order.find_by_ref(params[:id])
if @order.can_complete_order?
authorize! :complete_order, @order
@order.complete_order
elsif @order.can_complete_escalated_order?
authorize! :complete_escalated_order, @order
@order.complete_escalated_order
else
redirect_to root_url, :notice => "Order cannot be completed"
end
redirect_to my_queue_path, :notice => "Order #{@order.ref} has been marked as complete."
끝
좋아요! 오늘 오후에 시험 할거야. 사용자가 선택할 수있는 선택 항목에서 하우투 제한 이벤트에 대한 힌트를 줄 수 있습니까? 현재 가능한 모든 이벤트를 가져 오기 위해 @ item.state_transitions을 사용하고 있습니다. – tonymarschall
아마도 역할이 할 수있는 전환을 정의한 다음 사용자가 할당 한 역할을 통해 전환을 찾을 수 있습니다. – Jon
나는 빨간색을 가지고있다. http://stackoverflow.com/questions/3293400/access-cancans-can-method-from-a-model 그러나 어떻게 사용자를 얻는 지 이해할 수 없다. (user.can? (: update, @ article))를 모델 – tonymarschall
에 삽입 http://stackoverflow.com/questions/1568218/access-to-current-user-from-within-a-model-in-ruby-on-rails? 사용자를 모델로 전달하는 것은 합리적입니다. 현재 액세스하는 것은 아마도 안티 패턴 일 것입니다. – Jonah