가능한가요?방법이 항상 호출되는 것은 아니다

7003 단어 cancan
안녕하세요.
내 설정이나 cancan에 문제가 있는 것 같습니다.나는 달리기를 하고 있다.
Rails 3.0 beta4
cancan 1.2“c5737f6d2”
보아하니 나의 모든 방법과 능력을 정확하게 설정한 것 같다. 왜냐하면 정상적인 상황에서는 기능이 괜찮기 때문이다.그러나 어떤 페이지에서는 때때로 can을 불러올 수 있습니까?방법은 호출되지 않지만,false로 되돌아옵니다.
이 메서드를 erb 템플릿에서 호출한 다음 다음과 같은 일부 템플릿에서 호출합니다.
현직 대학 고문.가능한가요?(: 업데이트, 항목)
이 기능은 대부분의 시간 동안 유효하지만 지속적으로 갱신할 필요가 없습니다.
  can :update, TimecardEntry do |entry|
    puts 'CALLING :update, TimecardEntry'
    entry_approval = TimecardEntryApproval.for_entry(entry)
    entry_is_not_approved = entry_approval.nil? \
                            || entry_approval.status != TimecardEntryApproval::STATUS_APPROVED \
                            && entry_approval.status != TimecardEntryApproval::STATUS_SUBMITTED

    consultant.can?(:read, entry.timecard) && entry_is_not_approved
  end
그것을 어떻게 묘사해야 할지 모르겠지만, 나는 이 점에 대해 매우 많은 문제가 있다. 왜냐하면 그것은 이렇게 끊어졌다 이어졌다 하기 때문이다.당신의 도움이나 생각에 감사 드립니다.

묘사

고용인 재교육국 템플릿에서 거신 전화는 무엇입니까?직접 전화를 시도해 보세요

토론 #1

.
CanCan은 요청 간에 어떤 내용도 공유하지 않기 때문에 왜 매번 다른 결과가 나오는지 확실하지 않다.인증 용도는 무엇입니까?현재 사용자가 잘못된 설정을 하는 경우가 있을 수 있습니다.
또한 하나의 런닝 레일 애플리케이션에서만 이 기능을 테스트합니까?예를 들어 개발에서 Passenger를 사용하면 여러 개의 실례를 불러올 수 있고 다른 행동을 초래할 수 있습니다.current_consultant 답변 감사합니다.can?는 컨설턴트 모델의 실례이다.인증을 위해 Desive 1.1rc2를 사용하고 있습니다.
다음과 같이 CanCan 통화 설정을 직접 취소해 보았습니다.
능력새 (@consultant)입니다.가능한가요?(: 업데이트, 항목)
같은 이상 결과가 때때로 가능합니까?방법은 전혀 사용되지 않았지만,false로 되돌아오는 것이 있습니다.
이 one Rails 애플리케이션만 실행하고 Passenger는 사용하지 않습니다.can?consultant는 사용자 모델의 이름입니까?당신은 매번 정확한 권한을 얻었다고 확신합니까?CanCan에 전달된 것이 일치하지 않는 한 무엇이 이런 불일치를 초래했는지 확실하지 않다.

토론 #2

네, consultant는 사용자 모델의 이름입니다.나는 이미 고문이 권한을 부여받았는지, 언제 권한을 부여받을 수 있는지 자세히 검사했다.반대에 부닥치고 있다.
보아하니 칸칸에 들어간 물건은 일치하는 것 같다.다른 생각도 있는데 한번 해봐도 될까요?current_consultant 뭔지 모르겠어요.일치하지 않는 문제는 항상 디버깅하기 어렵다.캐시가 있습니까?때때로 이것은 일치하지 않는 행위를 초래할 수 있다.만약 자동화 테스트를 설정했다면, 이 테스트들이 일치하지 않는지 확인하는 데 도움이 될 것이다.
http://wiki.github.com/ryanb/cancan/testing-abilities
불일치성에 대한 더 많은 정보를 발견하면 저에게 알려주세요.CanCan은 모든 요청에 대한 새 인스턴스를 작성해야 하므로 일관성이 있어야 합니다.

토론 #셋

Rails 3 beta4에 기본 정렬이 없는 한 캐시가 없습니다.나는 줄곧 디버거로 이 문제를 점차적으로 해결하려고 시도해 왔지만, 간헐적이기 때문에 해내기가 매우 어렵다. - |
다시 한 번 당신의 도움에 감사 드립니다. 나는 여전히 코드를 자세히 검사할 것입니다.

토론 #4

나는 방금 내가 제공하지 않았다는 것을 깨달았다

토론 #5

. 그러나 사람들이 항상 can을 부르면 이것은 상관없는 것 같다?당신이 제공한 위임 예시를 사용하시겠습니까?ie
delegate :can?, :cannot?, :to => :ability

def ability
  @ability ||= Ability.new(self)
end

토론 #6

맞아요. 컨트롤러와 보기에서

토론 #7

방법은 기본적으로 능력 실례에 의뢰되었기 때문에 그곳에서 하는 일과 똑같을 거예요.
그러나 관건적인 차이점은 묵인 실현은 단지 하나의 능력 실례일 뿐이지만, 여기서 모든 고문 실례는 하나의 단독 능력 실례가 있다.그러나 앞뒤가 맞지 않도록 해야 한다.current_user 다른 사람이 이 문제를 가지고 있지 않은 것 같아서 이 기능을 종료합니다.나는 이것이 너의 환경에 특정한 것이라고 가정해야 한다.더 간단한 응용 프로그램에서 이 문제를 복사하고 CanCan에서 복구할 수 있는지 확인할 수 있다면 여기에 의견을 달아 주십시오. 다시 열 것입니다.

토론 #8

여보세요,
우리는 마치 완전히 같은 문제에 부딪힌 것 같다.우리는 cancan 1.3을 사용했고 1.4로 업그레이드되어 아직도 사용하고 있습니다.
페이지를 다시 불러올 때, 때로는 일하고, 때로는 일하지 않습니다. 우리는 능력 내부에서 이상을 일으켰습니다. 이것은 확실히 때때로 나타납니다.
우리는 다음과 같이 생각합니다.
<% 가능하면?:업데이트, @freight%>
능력 측면:
사용자라면공업(: 탁송인)
  can [:update, :destroy], Freight do |freight|
    freight.user == user && freight.published?
  end
우리는 이것이 무슨 원인인지 확실하지 않다. 왜냐하면 그것은 간헐적이기 때문이다.이 방법을 사용하지 않으면false로 되돌아옵니다.어떤 도움도 감격을 금할 수 없을 것이다.
우리는 원본 코드를 디버깅해서 뭔가를 찾을 수 있는지 없는지를 보려고 한다.can? 나는 이 문제를 다시 토론하고 조사를 시도할 것이다.만약 이 문제에 대해 어떤 생각이 있다면, 여기에 평론을 발표해 주십시오.
@emoreno, 어떤 버전의 Rails를 사용하십니까?당신은 또 어떤 다른 플러그인과gem를 사용했습니까?자동 테스트가 있습니까? 있다면, 문제를 보았습니까?

토론 #9

내가 생각할 수 있는 유일한 이 문제를 방해할 수 있는 보석은Desive이다.우리는 Rails 3을 사용합니다.현재, 우리는 모델과 컨트롤러에서만 자동 테스트를 사용하지만, 우리는 그것을 볼 것이다. 현재 우리는 cancan을 디버깅해서 뭔가를 찾을 수 있는지 확인하고 있다.

토론 #10

@emoreno, 더 간단한 프로그램에서 문제를 다시 만들려고 시도할 수도 있습니다.Desive와 cancan만 설치하면 될 수도 있습니다.만약 당신이 거기에서 그것을 복제할 수 있다면, 나에게 그 프로그램을 보내 주십시오. 나는 자세히 볼 수 있습니다.

토론 #11

여보세요,
우리는 Cancan에서 권한을 검사하는 클래스에 기본 역할 영역을 사용하고 이 클래스를 자신의 조상으로 추가했기 때문에 subject를 비교할 때 문제가 있다는 것을 깨달았다.조금(@subjects) 오류가 발생했습니다.이 코드는 matches subject 클래스에 있습니까?(테마) can 정의에 있습니다.도와줘서 고마워요

토론 #12

@emoreno, 정말 재미있어요. 이 문제를 발견해 주셔서 감사합니다.어떻게든 해볼게요.

토론 #13

@emoreno, 단지 일련의 기록을

토론 #14

에 호출했는지 확인하시겠습니까?
@ 항목 = 항목.몽땅
...
할 수 있다보기: @projects
Can Can은 이런 식으로 사용하지 않을 예정입니다.모델 인스턴스 하나만

토론 #15

에 전달해야 합니다.여러 레코드를 필터링해야 하는 경우

토론 #16

범위를 사용할 수 있습니다.can? 우리는 하나의 기록만 전달했고 하나의 그룹이 아니다. 현재 우리는 우리가 사용하고 있는 두 모델에서 기본 역할 영역을 삭제하고 이 문제를 없애는 방법을 계속 찾고 있다.
도와 주셔서 감사합니다.can? 응, 나는 몇 가지 실험을 해서 이 문제를 복제해 볼 거야.accessible_by헤이, 내가 해결 방법을 찾은 것 같아.적어도 내 신청이야.
내포된 레벨은 다음과 같습니다.
사용자 -> 사진 -> 의견
사진 #show action에서 사용자가 댓글을 삭제할 수 있는지 확인하려고 할 때 (평론가와 사진 소유자는 이렇게 할 수 있어야 함) 이 동작을 가리키는 링크를 인쇄할 수 있는지 확인하려고 할 때 일치하지 않는 행동을 얻었습니다.
CanCan은 리뷰, 작성, 리뷰, 삭제(즉, 이러한 작업을 수행할 때)에서 잘 작동하지만 사진에만 이러한 행동을 보여주고 있다는 점을 분명히 지적하고자 합니다.나는 아직 이런 상황이 발생한 다른 사례를 발견하지 못했다.
내가 한 일은:
응용 프로그램/모델/평론 중입니다.rb
def can 제거(사용자)
사용자id==self.사용자id 또는 사용자.id==self.평론할 만하다.사용자신분증
#
#user==self.사용자 또는 사용자 ==self.평론할 만하다.사용자
#벌레를데려와라!
끝맺다
애플리케이션 내/모델/기능rb
can:파괴,평론,평론|
평론파괴할 수 있겠습니까?
끝맺다
응용 프로그램 내/views/comments/commenthtml.직원 재교육국
(이 부분은 포토s/show.html.erb에서 호출됨)
<%if 의견제거(현재 사용자)%>
<%= Eliminar에 링크,
[comment.commentable.user,comment.commentable,comment],
:method=>“delete”,
:confirm=>"코멘타리오에 가고 싶지 않아요?"
<%end% >

토론 #17

이 문제는 여전히 존재합니다.당분간 업데이트가 안 돼서 알려드리고 싶어요.위의 문제와 마찬가지로 기본 범위를 삭제하면 효과가 좋습니다.
편집: 영향을 받는 기본 범위는 중첩된 자원에만 있습니다.authorizing@topic에 접근하는 것은 효과가 좋으나, 권한 수여 테마 게시물의 권한 수여가 일치하지 않습니다.도움이 되었으면 합니다.)
고맙습니다. 해결책을 찾았으면 좋겠습니다.

토론 #18

@gitt, CanCan 버전 1.4.1을 사용하고 계십니까?또한 어떤 버전의 Rails를 사용하고 계십니까?

토론 #19

라이언, 아니, 1.4.0과 rails 3.0.1을 사용하고 있는 것 같아. 1.4.1로 업데이트하고 연락할게.
그러나 문제는 여전히 존재한다. rails.3.1로 업그레이드되었을 때 문제는 여전히 존재한다!

토론 #20

@gitt, 가능하면 Rails 3.0.3으로 업그레이드해 보십시오.나는 이 문제가 이 등대표와 같다고 믿는다.
https://rails.lighthouseapp.com/projects/8994/tickets/5497-default-scope-and-class-reloading
나는 칸칸에서 이 문제를 어떻게 해결해야 할지 확실하지 않지만, 생각나는 사람이 있으면 나에게 알려주세요.
업데이트: 아, Rails 3.0.3으로 업그레이드된 것을 보니 확실히 이 문제를 해결했습니다.잘 됐다!

토론 #21

@ryan, 업그레이드 및 복구:)

토론 #22

이것을 닫습니다. 이것은 Rails 3의 버그이기 때문에 CanCan에서 해결할 방법이 없다고 생각합니다.솔루션은 Rails 3.0.3으로 업그레이드하는 것입니다.좋아, 이건 Rails 2에서 문제가 아니야.

좋은 웹페이지 즐겨찾기