2012-11-20 2 views
0

Rails 3.1 앱에서 Devise 및 Cancan gem을 사용하고 있습니다.기기를 사용할 때 사용자 작업을 인증 해제하는 방법은 무엇인가요?

사용자에게 몇 개의 추가 열을 추가했습니다.

나는 능력을 정의 할 수 있었지만 잘 동작한다는 것을 알았지 만, Devise 나 사용자에게 접근 할 수 없어서 (예 : : 업데이트) 행동을 어떻게 인증받지 못했는지 알아 내지 못했습니다. 제어 장치?

어떻게 작동합니까?

+0

ability.rb을 추가 할 수 있습니다. Tsagadai는 before_filter를 사용하여 액세스를 제어하는 ​​방법을 올바르게 보여 주며 simonmorley는 원하는 것처럼 CanCan 역할을 사용하고 있습니다. –

답변

1

또는, 관리자가 작성하거나 읽을 수 있지만 업데이트 할 수 있습니다 ability.rb

if user.role? :admin 
    can [:create, :read], [Model1, Model2] 
end 

if user.role? :user 
    can [:read], Model1, :id => user.id 
end 

에서 다음을 사용해보십시오. 또한 사용자가 Model1에 속해 있으면 Model1을 읽을 수 있습니다. 당신이 "copy_model"와 같은 사용자 지정 작업을 작성하는 경우, 당신은 같은 당신은 아마 제공하는 두 가지 답변의 조합을 원하는

... 
can [:copy_model, :read], Model1, :id => user.id 
... 
+0

이 도움이되지만 완전히 해결되지 않습니다. Thx Simon – zabumba

+1

아, 좋아. 고안 할 기회가 없다는 것은 무엇을 의미합니까? 네가 필요로하는 것이 무엇인지 정확히 알아 내려고 노력하고 있니? S – simonmorley

+0

Devise는 엔진이므로 authorize를 호출하려면 users_controller에 액세스 할 수 없습니다! : update, @user (예 : 편집 또는 작성). 그렇다면 나는 그 일을 할 필요조차 없다는 것을 깨닫는다. 그래서 나는 지금이 질문을 닫아야한다고 생각합니다. Thx Simon – zabumba

1

사용자에게 필드를 추가하십시오 (예 : :approved). 관리자 만 액세스 할 수 있도록 설정하십시오.

ApplicationsController에 필터를 작성하십시오. 인증을 사용하기 시작하면 모든 것을 오래 사용할 수 있기 때문에 많이 사용하게됩니다.

class RandomsController 
    before_filter :verify_approval, only: [:update] 

빵, 수행 : 사용자가 권한을 요구하는 경우

def verify_approval 
    unless current_user.approved 
    flash[:error] = I18n.t("not_approved") 
    redirect_to(root_path) 
    end 
end 

는 그런 다음 필터를 사용합니다. 편집자가 아니거나 UsersController입니다.

+0

예,하지만 언제 어디서 설정합니까? TRUE로 승인 되었습니까? 관리자 만 액세스 할 수 있도록하려면 어떻게해야합니까? – zabumba

+0

오, 지금 무슨 뜻인지 알 겠어. 내가 원하는 것은 사용자가 자신의 프로필을 편집 할 수는 있지만 다른 사용자는 편집 할 수 없게하는 것입니다. 귀하의 솔루션은 관리자 만 프로필을 편집 할 수 있도록 허용하는 것입니다. 그게 내가 필요로 하는게 아니에요 – zabumba

관련 문제