2010-05-15 1 views
1

Authlogic gem/Rails를 사용하는 동안 뭔가 빠져 있다고 생각합니다. 무대를 설정하려면 여러 사용자가 있고 각 사용자는 게시물과 댓글을 만들 수 있습니다. 게시물이나 댓글을 표시 할 때 수정 또는 삭제할 수있는 옵션을 작성한 사용자에게 제공하고 싶습니다.Authlogic 현재 사용자 질문 - 관리자 링크 숨기기

다음 코드를 사용하여 사용자가 로그인했거나 로그인했지만 실제 사용자에게만이 링크를 표시하는 방법을 찾지 못하는 경우에 따라 요소를 숨기고 표시합니다. 에 기록되지 않은 사용자입니다. 여기에

<% if current_user %> 
    <%= link_to 'Edit', edit_question_path(question) %> | 
    <%= link_to 'Destroy', question, :confirm => 'Are you sure?', :method => :delete %> 
<% else %> 
    <p>nothing to see here</p> 
<% end %> 

내가 여기서 뭔가를 변경해야하는 경우 응용 프로그램 컨트롤러에있는 CURRENT_USER의 데프이다.

class ApplicationController < ActionController::Base 

    helper :all # include all helpers, all the time 
    protect_from_forgery # See ActionController::RequestForgeryProtection for details# 

    helper_method :current_user 

    private 

    def current_user_session 
    return @current_user_session if defined?(@current_user_session) 
    @current_user_session = UserSession.find 
    end 

    def current_user 
    return @current_user if defined?(@current_user) 
    @current_user = current_user_session && current_user_session.record 
    end 
end 

답변

0

이 시도 : 난 그냥이 보석을 설치하고 난을 입력 한 경우 권한 컨트롤러를 생성

<% if current_user_is_owner?(question) %> 
    .. display something 
<% end %> 
+0

좋아, 내가 무슨 일이 일어나고 있는지 이해하기를 원하는 것처럼 헤닝 코흐에서 이지스 솔루션으로 이동하기 전에 위를 구현하고있다. 응용 프로그램 컨트롤러 코드를 넣었지만 현재 def가 삭제되지 않았습니다. SitesController에서 나는 두 번째 코드 블록의 require_owner 라인을 넣었다. 나는 <% if @require_owner %> 래퍼를 편집 및 파괴 링크 주위에 넣었다. 그들은 성공적으로 링크를 숨기지 만 로그인 할 때 소유자에게 보여주지 않습니다. – bgadoci

+0

필터 기능으로 require_owner를 사용해야합니다. 당신의 관점에서'current_user_is_owner? '를 사용하십시오. 코드를 업데이트했습니다. –

+0

당신은 일종의 마법사입니다. 다시 한번 감사드립니다. – bgadoci

1

authlogic과 같은 인증 솔루션은 사용자가하려는 것을 지원하지 않습니다. 위의 예제이다

<% if current_user.may_update_question? @question %> 
    <%= link_to 'Edit', edit_question_path(@question) %> 
<% end %> 

Aegis를 사용하면 사용자가 특정 작업에 액세스 할 수 있는지 여부 등의 세밀한 검사를 할 수 있도록 authlogic에 당신이 정상에 사용할 수 인증 해결책이 있습니다.

+0

:

이제
class ApplicationController < ActionController::Base # add your methods (eg: current_user etc) helper_method :current_user, :logged_in?, :current_user_is_owner? def init_data klass = controller_name.camelize.singularize.constantize #User param_key = controller_name.camelize.downcase.singularize.to_sym # :user obj = case (action_name.to_sym) when :new, :create klass.new(params[param_key]) when :edit, :show, :destroy klass.find(params[:id]) when :update klass.find(params[:id]).tap{|o| o.attributes = params[param_key]} end instance_variable_set("@#{param_key}", obj) # set the obj to @line_item end def require_user return true if logged_in? render_error_message("You must be logged in to access this page", new_user_session_url) return false end def require_owner obj = instance_variable_get("@#{controller_name.singularize.camelize.underscore}") # LineItem becomes @line_item return true if current_user_is_owner?(obj) render_error_message("You must be the #{controller_name.singularize.camelize} owner to access this page", root_url) return false end def logged_in? return current_user != nil end def current_user_is_owner?(obj) logged_in? and obj.respond_to?(:user_id) and (obj.send(:user_id) == current_user.id) end def render_error_message message, url respond_to do |format| format.html do flash[:notice] = message if request.xhr? head :bad_request, :error => message else redirect_to url end end format.json { render :json => message, :status => :unprocessable_entity } format.xml { render :xml => message, :status => :unprocessable_entity } end end end 

뷰 코드에서 컨트롤러

class PostsController < ApplicationController before_filter :require_user # all actions require user to be logged in before_filter :init_data # create a member variable called @post, initialized based on the action before_filter :require_owner, :only => [:edit, :update, :destroy] #edit, update, and destroy actions require ownership def update if @post.save else end end end 

에 다음 : 역할 : 사용자 권한 : edit_question do | us 어, 질문 | 사용자가 사용자 # 사용자는 자신의 게시물 끝 최종 는 그 다음보기에서 위의 코드를 입력 종료 편집 할 수 있습니다 등록 == question.creator을, 나는 점점 오전 : 허용 정의되지 않은 메서드'권한 '이지스을 위해 : 모듈 – bgadoci

+0

안녕하세요, 나는 KandadaBoggu의 해결책을 얻었습니다. 그래도 고마워. – bgadoci

+0

Aegis @ henning-koch를 제안 해 주셔서 감사합니다. 훌륭하게 작동합니다. :) –