2011-10-22 2 views
0

저는 지금 당분간이 문제에 시달렸습니다. 전문가에게 물어볼 것입니다.Devise를 사용하면 사용자가 속한 항목 만 편집/볼 수 있도록하려면 어떻게해야합니까?

사용자가 Devise를 사용하여 만든 항목 만 편집하거나 볼 수 있도록하려고합니다.

사용자가 잘 설정되어 있습니다. 항목은 연결된 사용자와 함께 생성되며 레일 콘솔을 통해이를 확인할 수 있습니다.

def create 
@item = Item.new(params[:item]) 
@item.user = current_user 
end 

은 내가 지금하려고하는 것은 한 번 로그인 그래서, 사용자는 자신이 만든 항목,없이 다른 사람을 볼 수 있도록하는 것입니다.

def index 
@items = Items.all 
end 

def index 
@items = current_user.Items.find(params[:id]) 
end 

으로하지만 나를 위해 작동하는 것 넣은 사람은 아니다 나는

undefined method `Items' for #<User:0x007fdf3ea847e0> 

수있는 사람의 서비스를받을 : 내 항목 컨트롤러에서

는 교체 시도 다음에 무엇을 시도 할 것인가에 대한 조언이 있습니까?

고마워요. 당신이 할하려는 것은 정말 가까이

+0

devise는 인증 프레임 워크/보석입니다. 당신이 찾고있는 것은 승인 보석입니다. Cancan은 현재의 goto이지만, 꽤 많이 있습니다. 교장/기숙사와 함께 가장 잘 작동 –

+0

복제본 [Setup Devise]는 자신의 레코드 편집 만 허용 할 수 있습니까?] (http://stackoverflow.com/questions/3966344/setup-devise-to-only-allow-editing-of- 자신의 기록) – Mark

답변

2
  1. 어쩌면 나는 옛날 학교 다.하지만 권한을 확인하기 위해서만 current_user를 사용하여 레코드를 찾지 않을 것이다. 내가 직접 기본 키 관계를 사용한다 (그들은 변경하지 마십시오) :

    @items = Item.find(:all, :conditions => { :user_id => current_user[:id] }

또는

@items = Item.find_all_by_user_id current_user[:id] 

권한을 설정에 관해서는, 실제로 고안을 당신이 그렇게 할 수 어쩌려 구`t 하지만 Cancan이라고 불리는 우수한 보충제가 있습니다. 확실히 조사해야합니다. Cancan을 사용하면 권한을 정의 할 수있는 ability.rb 클래스가 생깁니다. 그러면 당신이 찾고있는 것은 다음과 같습니다.

class Ability 
    can [:read, :show, :edit, :update, :delete, :destroy], Item do |item| 
    item.user_id == user.id 
    end 

    # or 
    can :manage, Item do |item| 
    item.user_id == user.id 
    end 
end 

위의 코드는 Cancan 문서를 읽으면됩니다.

+0

이것은 효과가있었습니다. 나는 ThinkVitamin에서 내가 필요로하는 비트와 조각의 나머지 부분을 준 정말로 훌륭한 시리즈를 발견했다. 고마워요! – Paul

1

...

current_userUser 클래스의 "인스턴스"입니다.

모든 사용자에게 적용되는 특별한 방법 인 사용자 인스턴스의 연결을 사용하고 싶습니다. "items". 당신이 그것을 만들 때, 당신은 또한 사용할 수 있습니다, 당신은 또한 current_user.items.find(params[:id])

원하는

을합니다 (Item 클래스도 belongs_to :user가있는 경우이 방법뿐만 아니라 user라고해야합니다) current_user.items.create(params[:item])

+0

좋아, 감사합니다 벤. 나는 그것을 시도했다. 지금 받고 있습니다 ID없이 상품을 찾을 수 없습니다. 마치 너무 가까이 다가오고 있습니다. – Paul

+0

실제로'''CanCan'''의 최신 버전에서는''current_user.items'''가 정상적으로 작동합니다. – Cacofonix

1

질문을 이해하는 경우 CanCan과 같은 인증 라이브러리를 확인해보십시오.

https://github.com/ryanb/cancan

그것은이 같은 권한 유형의 일을 처리 할 수 ​​꽤 매끄러운 작동합니다. 많은 사람들이 Devise와 함께이 라이브러리를 사용합니다.

+0

고마워요. 한 번에 CanCan을 사용해 봤지만 꽤 초록색이어서 복잡한 점이 마음을 아프게했습니다. 지금은 매우 가까워지고 있습니다 (편집 /보기를 제한 할 수 있음). 그래서 사용자가 인덱스보기에서 자신의 항목 만 볼 수 있도록 만들고 있습니다. – Paul

관련 문제