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
이 Project
및 Manager
을 정의 두 가지 모델이있다 : 그처럼 보이는 경로를 갖고 있다고 할 수 있습니다. 그것들은 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!
에 그 같은 것입니다.
어떤 좋은 접근 방법이 있습니까? 반드시 ... 캉캉이 아니어야합니다
, 많은 감사 세르게이처럼보십시오! – sontags