나는 두 개의 멋진 보석 인 state_machine과 cancan을 최근에 내 레일 어플리케이션에 사용하고 있지만 깨끗하게 통합하는 가장 좋은 방법은 궁금합니다. 현재 컨트롤러에서 승인 한 작업을 수행하는 버튼에 상태 전환을 배치했습니다. 이것은 완벽하게 작동합니다. 누가 해당 작업을 수행 할 수 있는지 제한 할 수 있습니다.레일즈 cancan 및 상태 머신 - 인증 상태
사용자에게 편집 양식의 개체 상태를 변경할 수있는 권한을 부여하고 싶습니다. state_machine은 해시에서 state_event 키를 수행 할 작업 값으로 선택합니다 (state_machines 콜백을 모두 통과하게 됨). 이것은 update_attributes의 params 해시와 함께 전달 될 수 있습니다. 환상적.
그러나 특정 사용자 만 개체를 특정 상태로 변경할 수 있어야합니다. 어떻게 구현할 수 있습니까? 아이디어는
params['state_event']=='move_to_x'
일부 사용자에 대한 구제해야하지만, 다른 사람을 위해 허용 될 것입니다. 그것은 또한 내가 이것을 구현할 때까지 영리한 사용자가 허가를 받아서는 안되는 경우에도 상태 이벤트 내부에 어떤 것을 게시 할 수있는 권한 부분입니다.
나는 당신이하려는 것을 얻는다. 그러나 나는 모델 레벨의 메소드처럼 나쁜 Current_user를 사용하여 인상을 받고있었습니다. –
나쁘지 않은데, 제 의견으로는 일반적인 것이 아닙니다. 우리는 상태 기계와 같은 것들을 위해해야하기 때문에 그렇게합니다. '현재 사용자 모델'을 검색하면 나쁜 이유와 왜 그렇지 않은지에 대한 게시물 모음을 찾을 수 있습니다. – simonmorley
나는 모델 레이어에서 현재 사용자를 사용하는 것을 싫어하는 부분이 있음을 짐작할 수 있습니다. 내가 가지고있는 가장 큰 걱정거리는 내가 레일에서 벗어난 것이다. 또는 레일 c에서 모델을 사용하려고합니다. 나는 현재 사용자 메소드를 거기에서 사용할 수있게 만들 필요가 있고 유닛 테스트에서도 접근 할 수 있도록해야한다. 어색해 보입니다. 아직도 말했듯이 인증 코드가 내 모델을 만지는 것을 막아 준 내 솔루션에 만족합니다. 그것은 cancan이 어떻게 작동하는지에 대한 느낌과 비슷한 컨트롤러에 머물러 있습니다. –