0

사용자가 특정 역할 (vendor)로 로그인 한 경우 사용자는 자신의 저장소에서 만든 항목 만 볼 수 있습니다. 다른 공급 업체의 제품을 볼 수 없어야합니다.현재 로그인 한 사용자가 속한 제품 만 보도록 제한하려면 어떻게합니까?

그래서 (Devise, CanCan, Rolify를 사용하여) 내 승인에서이 작업을 수행하려고합니다.

user ||= User.new # guest user (not logged in) 
if user.has_role? :vendor 
    can :dashboard 
    can :manage, [Product, Vendor], :vendor_id => user.id 
    can :view, [Product], :vendor_id => user.id 
end 

하지만 .... 그와 많은 행운이 없었어요 ... 나는 무엇을 놓치고 :

나는이 시도?

내가 같은 컨트롤러 제품을 제한 할 수 있다는 것을 알고 편집 1 :

@product = current_user.products 

하지만 그건 내가 무엇을 찾고 아니에요. 이 경우 공급 업체 (즉, 역할이 :vendor 인 사용자)는 매장에 추가 한 제품 만 볼 수 있어야하지만 다른 공급 업체가 추가하는 제품을 볼 수 없어야합니다. 하지만 구매자 (즉, 역할이 :buyer 인 사용자)는 모든 구매자의 모든 제품을 볼 수 있어야합니다 (관리자/등). 구매자는 가격 및 제품의 일부 다른 속성 등을 볼 수 없습니다.

이 모든 것을 어떻게 달성 할 수 있습니까?

+0

'can : view' 대신에'can : read'라고 생각합니다. –

답변

1

컨트롤러에서 해당 사용자의 제품 만 찾을 수 있습니다.

def show 
    @product = @user.products.find(params[:id]) 
    ... 

편집 및 업데이트 작업에도 동일하게 적용됩니다. 이 경우에는 Cancan이 필요하지 않습니다.

+0

그걸 알고 있습니다.하지만 사이트의 일부 섹션에 액세스 할 수 없어야합니다. 1 공급 업체는 다른 공급 업체의 제품 카탈로그를 볼 수 없어야합니다. 구매자는 모든 공급 업체의 모든 제품을 볼 수 있어야합니다. 컨트롤러에 논리를 넣으려면 모든 작업과 모든 역할에 대한 사용자 지정 논리를 작성해야합니다 ... 맞습니까? 그것을하기위한 또 다른 방법이 있어야합니다. – marcamillion