2012-08-22 3 views
0

응용 프로그램과 엔진 (gems, Rails :: Engine)이 있습니다. CanCan이 승인에 사용되었으며 엔진에서 사용하고 싶습니다. 엔진 네임 스페이스와 격리 있지만, 예를 들어 :엔진 별 CanCan 기능 및 추가 규칙

module MyEngine 
    class ApplicationController < ::ApplicationController 
    end 
end 

그래서, 나는 또한 컨트롤러에서 load_and_authorize_resource (모델 클래스 이름을 지정해야합니다)와 '수'도우미를 사용할 수 있습니다. 주 신청시 능력에 기고해야하는 모든 능력 (엔진 모델은 네임 스페이스가되어야합니다). 그것은 좋은 방법이 아닙니다. 이 엔진에서 엔진에 대한 능력을 지정하고 싶지만 새로운 능력 객체를 만들지는 않습니다. 어떻게해야합니까? 어떤 생각?

+0

해결책 중 하나 : 엔진에서'MyEngine :: Ability' 클래스를 모델로 만듭니다 ('include :: CanCan :: Ability'도). 여기에 엔진에 대한 기술을 작성하십시오. 'current_ability.merge (MyEngine :: Ability.new (current_user))'를 만드는'ApplicationController'에'before_filter'를 추가하십시오. 어쩌면 내가 원하는 것입니다 ... –

답변

2

정말 멋지지 않았지만, 현재 제가 쓰고있는 레일즈 애플리케이션과 비슷한 것을했습니다. 필자는 폼 엔진 CMS 엔진의 일종 인 FormX라는이 응용 프로그램 내 엔진을 작성했습니다. 사용자가 양식에 대한 특정 응답 만 편집하고 일부 사용자 만 양식을 작성할 수있는 기능을 갖기를 원했습니다.

내가 Formx 네임 스페이스에 Form 모델을 가지고 있음을 감안할 때, 나는 Formx::Form 구문을 사용하여 수행하여 내 MainApp ability.rb 파일에 능력을 정의 할 수 있었다.

Ex.

can :manage, Formx::Form 

그런 다음 내 컨트롤러에서 나는 엔진의 네임 스페이스 내에서 작동하도록 load_and_authorize_resource을 얻을 수 있기 때문에 수동으로 각 작업에 authorize! 전화를 걸했다.

+2

'load_and_authorize_resource class : Form'을 사용해보십시오. 엔진 네임 스페이스와 함께 작동합니다. –