2013-05-16 2 views
3

상황 : 데모 기간이있는 레일 3.2 앱. 이후 사용자는 서비스 비용을 지불해야합니다.승인을위한 모범 사례는 무엇입니까?

질문 : 사용자가 결제 수단을 추가하지 않거나 결제 요금제를 선택하지 않은 경우 웹 앱의 '유료'부분에 대한 사용자 액세스를 제한하는 권장 방법은 무엇입니까?

if user.admin? || user.in_demo || user.has_all_payment_data 
    # carry on 
elsif user.should_add_payment_method 
    # send them to add payment method page 
elsif user.should_choose_plan 
    # send them to add plan 
else 
    # redirect to home page or whatever 
end 

나는이를 건너 뛰는 모든 요청에 ​​사용자의 지불 상태를 확인하고 그에 따라 리디렉션 응용 프로그램 컨트롤러에 before_filter (진형했습니다 다음과 같이

나는 사용자를 정렬 뭔가가 필요 홈페이지/프로필 편집 등의 장소에서), 그러나 나는 더 빠른 방법이 있어야한다고 생각하고 있습니다. 너무 복잡해지고 응용 프로그램 컨트롤러에서 복잡성을 느끼는 것이 잘못되었습니다. 나는 cancan과 같은 사용자 역할 라이브러리를보고 있었지만 맞는 것은 찾을 수 없습니다.

+0

DEPA, 당신의 편집 주셔서 감사합니다. 우리는 이미 사용자/암호 및 관리자 측면에서 권한을 이미 부여했다고 덧붙이고 있습니다. 사용자의 지불 상태를 포함하도록 확장하는 최선의 방법을 모르겠습니다. – omnikron

+1

나는 당신이 이미 인증을 가지고 있다고 말하는 것을 믿습니다. 그것은 다른 것입니다. – depa

+0

당신 말이 맞아요! 나는 두 개념의 차이를 정리하지 않았다. 너무 많은 것은 단지 구글에 어떤 용어를 알리는 것입니다 ... – omnikron

답변

2

Jonas Nicklas (Capybara 및 CarrierWave 제작자)의 게시물에서 CanCan보다 간단한 접근 방법을 자세히 설명합니다. 그의 접근 방식은 인증 규칙을 만들려는 각 모델에 대한 일반 Ruby 클래스를 기반으로합니다.

Simple authorization in Ruby on Rails apps (Elabs blog)

그들은 학자라는 이름의 보석으로 해당 솔루션을 오프로드,하지만 정말 처음부터 구현할 수있을만큼 간단 보인다.

Pundit gem (GitHub)

+0

아,이 기사를 더 이상 보지 못했습니다. 저는 캔칸의 접근법을 선호합니다. 캔칸 리포지토리가 소수의 사람들에게 권리를 위임 할 때 혜택을 볼 것이라고 저는 충분히 동의합니다. 우리는 비슷한 것을 구현할 것입니다. 고마워요! – omnikron

1

그때 비 지불 사용자가 액세스 할 수있는 작업을 위해 그것을 우회하는 개별 컨트롤러에서 skip_filter를 사용하여 응용 프로그램 컨트롤러에 before_filter를 제안은, 예를 들면 :

class ApplicationController < ActionController::Base 
    before_filter :check_payment 
    ... 
end 

class UserController < ApplicationController 
    skip_filter :check_payment, :only => [:login, :logout, ...] 
    ... 
end 

이는 관련에 포함 된 액세스를 유지 컨트롤러를 사용하는 것이 아니라 필터 자체에 점점 더 큰 :except => ...이 필요합니다.

+0

감사합니다. 정확히 우리가 이미 가지고있는 것입니다. 미안하지만 질문에 충분히 설명하지 않았다면. 나는 복잡성에 잘 적응하지 못하기 때문에 대안을 찾고있다. – omnikron

+0

필터 자체가 복잡하거나 문제를 포함하거나 제외해야하는 작업의 수가 너무 많습니까? – DaveMongoose

+0

필터 자체의 복잡성 - 우리는 상당히 다른 상태가 있으며 너무 지저분 해지고 있습니다.나는 cancan이 앞으로 나아갈 것 같아서, 나는 그것을 너무 빨리 기각했다. – omnikron