모형상의 홀수 권한 수여 행위를 가리키다

3671 단어 cancan

묘사

죄송합니다. 제가 질문을 하나 더 하면 잠시 찾았지만 운을 찾지 못했습니다.도움말 감사합니다:)
다음 코드는 자체 참조 모델에 사용됩니다.유형은 사실상 하나의 논단이지만, 무미건조한 코드를 위해 나는 이 길을 갔다.하나의 포럼에서 상태를false로 설정하려고 시도할 때 이 문제가 발생합니다.이것은 가설이다.
Class A에는 2개의 포럼이 있습니다.카테고리 A의 상태는true, 포럼 1의 상태는true, 포럼 2의 상태는false로 설정됩니다.이상적인 상황에서 당신은 포럼 2가 아니라 유형과 포럼 1을 볼 수 있어야 합니다.실제 결과는 권한 수여가 거부된 이상을 일으켰고 전체 색인 작업에 접근할 수 없습니다.

능력rb

can :read, Forum, :state => true

논단rb

belongs_to :category, :class_name => "Forum"
has_many :forums, :dependent => :destroy, :foreign_key => "category_id"

나는 너의 관제원이다.rb

load_and_authorize_resource :forum, :instance_name => :category, :only => :index
load_and_authorize_resource :forum, :through => :category, :only => :index

색인html。직원 재교육국


Forums Controller가 중첩 컨트롤러입니까?그러니까

토론 #1

개의 선물이 있습니까?CanCan은 이 파일을 찾습니다. 존재하지 않으면 상위 리소스를 찾을 수 없으므로 액세스를 거부합니다.
만약 파라미터가 호출된다면, 이것은 아마도 당신이 원하는 것일 것입니다.
다음은 로그의 문제 예입니다.두 번째 포럼 마운트 줄을 보면 권한 부여 필터가 적용되지 않은 것을 발견할 수 있습니다.두 개의 검색어는state='t'를 찾아야 하지 않습니까?
<% @categories.each do |category| %>
  <p><%= category.title %></p>
  <% category.forums.each do |forum| %>
    <p><%= forum.title %></p>
  <% end %>
<% end %>
load_and_authorize_resource :category, :class => Forum, :only => :index
load_and_authorize_resource :forum, :through => :category, :only => :index

토론 #2

The ForumsController isn't nested under anything than itself. ( if that makes sense ) The forum_id isn't present because we're supplying category_id as the foreign_key for the parent association.

토론 #셋

I just understood what you're saying. No, there's no /category//forums. This exists within the same controller/model. ForumsController is a top level controller.

maybe this will help, is there a way to specify a "filter" of sorts in the controller? For example

load_and_authorize_resource :category, :class => Forum :category_id => nil, :only => :index
params[:forum_id]

Shouldn't both queries look for state = 't'?


네, 그래야 하는데, 여기에서 무슨 일이 일어났는지, 두 번째 조회는 어디에서 생성되었는지 잘 모르겠어요.
루트에 플러그인이 없으면, 호출을 하나만 지정해야 합니다.당신이 원하는 확실한 행동은 무엇입니까?색인 작업을true 상태의 클래스만 불러오고 싶습니까?
def 인덱스
@ 범주 = 포럼여기서 (:category id=>nil,:state=>true)
끝맺다
where 자구에 추가 필터를 추가하려면 index 작업에서 다시 호출하십시오.예컨대.
불러오기 및 권한 부여 자원:category,:class=>Forum,:only=>:index
def 인덱스
@categories=@categories.여기서 (: category id=>nil)
끝맺다
이것은 네가 원하는 것이냐?category_id Forums Controller와 모델의 중첩은 라우팅 중첩이 아닙니다.이 모든 것은 모델 연관을 통해 이루어진 것이다.나는 내가 매우 잘 설명했다고 생각하지 않지만, 이것을 시험해 보겠다.
다음은 실제 코드의 요점입니다.https://gist.github.com/56b0d1a7c104126ef079
1. 포럼 모델은 유형과 포럼에 사용
2. 범주는 nil category id(부모 없음)만 있는 포럼입니다.
3. 색인 작업에서 @categories를 불러올 때has many association

토론 #4

@gitt를 불러옵니다. 이 줄의 보기에 문제가 있습니다.
<% 범주.논단do | 포럼당|%>
이것이 바로 두 번째로 포럼을 직접 얻는 조회를 만드는 이유입니다. 이것은 CanCan을 거치지 않았기 때문에 권한 검사를 적용하지 않았습니다.여기서 직접 Active Record 연관을 사용하면 CanCan이 Active Record의 내용을 덮어쓰지 않습니다.
사용자가 방문할 수 있는 플러그인 포럼만 얻으려면 이렇게 전화해야 한다.

토론 #5

<% 범주.논단를 통해 액세스할 수 있습니다.do | 포럼당|%>
이것은 포럼을 사용자가 방문할 수 있는 포럼으로만 제한할 것이다.

좋은 웹페이지 즐겨찾기