2013-10-26 2 views
1

Sinatra로 작성된 webapp 용 인증 메커니즘을 얻으려고합니다. 현재 나는 sinatra-can으로 놀고 있습니다. 지금 당면한 문제는 can 메서드에서 특정 모델에 액세스해야한다는 것입니다.CanCan을 통한 Sinatra 인증

class ProjMgmt < Sinatra::Base 
    get '/edit/:project' do 
    project = Project.where(name: param[:project]).first 
    authorize! :edit, project 
    project.to_html 
    end 
end 

ProjectManager을 정의 두 가지 모델이있다 : 그처럼 보이는 경로를 갖고 있다고 할 수 있습니다. 그것들은 mongoDB (mongoid, NO datamapper, ActiveRecord 등을 통해)에 저장되고 has_and_belongs_to_many 관계를가집니다. 관계는 project.managers 또는 manager.projects을 통해 액세스 할 수 있습니다.

이제 특정 프로젝트와 관련된 관리자 만 프로젝트를 편집 할 수 있습니다. 분명히

class Ability 
    include CanCan::Ability 
    def initialize(user) 
    can :edit, project if project.managers.include? user 
    end 
end 

, 어떤 project에 대해 알고하지 않습니다 Ability 때문에 작동하지 않습니다 : 내가 갖고 싶은 authorize!에 그 같은 것입니다.

어떤 좋은 접근 방법이 있습니까? 반드시 ... 캉캉이 아니어야합니다

답변

1

def initialize(user) 
    can :edit, Project do |project| 
    project.managers.include? user 
    end 
end 
그것 뿐이다
+0

, 많은 감사 세르게이처럼보십시오! – sontags