CanCan은 프로젝트 기반 사용자 역할에 적합합니까?

3340 단어 cancan
안녕하세요.나는 프로젝트가 있는 응용 프로그램을 개발하고 있다.각 항목의 사용자 역할은 고유합니다.일부 프로젝트 사용자는 전혀 역할이 없고 일부 프로젝트 사용자는 관리자, 관찰자 등의 역할을 할 수 있다.모든 항목에 대해 정의된 정적 세트입니다.
CanCan에서 이런 종류의 설정을 처리할 수 있습니까?예전에 이렇게 해본 사람 있어요?어떤 예가 있습니까?
감사합니다!

묘사

해보고 싶을 수도 있어요.http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/
이것은 그들이 Desive를 사용하여 신분 검증을 하고 cancan을 통해 역할/권한 검증을 하는 작은 샘플입니다.이것은 매우 실행 가능한 방법이다. 왜냐하면 나는 이미 나의 몇 개의 rails 응용 프로그램에 유사한 방법을 구축했기 때문이다.

토론 #1

이것은 매우 멋있지만 사용자에게 분배된 역할에 근거하여 나는 CanCan이 이 역할에 매우 적합하다고 생각한다.내가 시도한 유일한 일은 사용자, 프로젝트, 그리고 사용자 프로젝트 간의 역할이다.사용자는 서로 다른 항목에서 서로 다른 역할을 할 수도 있고, 전혀 어떤 역할도 하지 않을 수도 있다.당신은 어떻게 생각합니까?칸칸은 수용할 수 있습니까?

토론 #2

CanCan은 역할에 대한 정의에 대한 요구가 거의 없기 때문에 사용자의 요구를 지원할 수 있을 것입니다.리메이크

토론 #셋

방법을 통해 캐릭터를 확정하는 데 사용되는 모든 내용을 이 능력에 전달할 수 있다.위키 페이지Changin Defaults를 참조하십시오.
# 내부 컨트롤러
def 현재 능력
@ 현재 | | | = 능력.새로 만들기(현재 사용자, 현재 항목)
끝맺다
#능력수업에서
def 초기화(사용자, 프로젝트)
사용자라면프로젝트 관리자?(프로젝트)
can:manage,:all
기타
can:read,:all
끝맺다
끝맺다
이것은 모든 요청에 따라 현재 항목에 접근할 수 있다고 가정합니다.이것은 너의 문제를 해결할 수 있니?current_ability@Ryan, 답변 감사합니다.나는 이것이 나의 문제를 해결하는 데 매우 가깝다고 생각한다...요청할 때마다 현재 항목에 접근할 수 없다는 것이 도전입니다.항목을 보지 않고 로그인할 수 있지만 권한이 필요한 항목으로 이동할 수 있습니다...
따라서 현재 항목을 정의하면 항목에서 행동을 취하기 전에 권한을 검사하고, 항목을 정의하지 않으면 항목과 무관한 컨트롤러에 따라 행동을 검사할 논리가 필요할 수도 있습니다.(이것은 당신이 하나의 프로젝트에서 행동하는 것이 아니라는 것을 의미한다. 예를 들어 하나의 프로젝트에 새로운 프로젝트를 추가하려고 시도하는 것은 이 프로젝트가 발생할 수 없다는 것을 의미한다)
현재의 항목은 CanCan의 응용 프로그램 컨트롤러에서 정의해야 합니까?
감사합니다!

토론 #4

프로젝트가

토론 #5

의 능력을 가지고 있는지 확인하고 논리를 다른 방식으로 처리할 수 있습니다.
#능력
프로젝트라면영?
예: 관리 항목이 사용자인 경우관리자?
기타
# 프로젝트 정의 기능 사용
끝맺다nil 셰리안.이 일을 사랑

토론 #6

@Ryan, 제안한 생각에 문제가 생겼어요...다음은 제 프로젝트controller에 "before filter:prepareCanCan,:only=>[:show,:edit]"를 추가하여 Projectd 보기 변수를 설정합니다.그 다음은 능력.rb 저는 기본적으로 def 초기화(사용자, Projectd 보기)가 있습니다...프로젝트d viewing==8이면...나는 8을 하드코딩했기 때문에 URL을 변경해서 그것을 테스트할 수 있다.로그를 확인하고 Projectd 를 통해 8을 보더라도 작동하지 않습니다. 로그는 항상 실패합니다.내가 너의 건의를 정확하게 집행했니?감사합니다!

토론 #7

응, 코드를 보지 않으면 문제가 어디에서 발생했는지 판단하기 어려워.당신은

토론 #8

before Filter와 prepareCanCancontroller 방법의 내용을 붙일 수 있습니까?current_ability@ryan, 나는 단지 내가 원하는 논리적인 순서대로 그것을 붙여서 너의 생각을 듣기를 기대하고 있을 뿐이다...(초보자 경고)
http://pastebin.com/WeeHnk2d

토론 #9

토론 #10

before 필터에서 국부 변수를 설정하고 있지만, 이것은 실례 변수일 것입니다. 이렇게 하면 방법 간에 공유할 수 있고 prepareCanCan에 전달할 수 있습니다.
projectd_view=@project.신분증
또는, 이 과정을 간소화하고 Ability.new 방법의 params[:id] 에서 프로젝트 id를 직접 가져오기를 원할 수도 있습니다.Projects Controller에서만 적용해야 하기 때문에 거기서 진행할 수 있습니다.
# 애플리케이션 컨트롤러에서
def 현재 능력
@ 현재 | | | = 능력.새 사용자(현재 사용자, 없음) #항목이 없으므로
끝맺다
# ProjectsController
def 현재 능력
@ 현재 | | | = 능력.새로 만들기(현재 사용자, 매개 변수 [:id] & ¶ms[:id]. i까지)
끝맺다current_ability 너무 좋아요.고마워, 라이언.나는 Can Can을 좋아한다. 미친 듯이 간단하지만, 비할 바 없이 강하다.

좋은 웹페이지 즐겨찾기