0
선언적인 인증을 사용하여 내 사이트에 대한 액세스를 제어하려고합니다. 하지만 filter_resource_access를 사용하면이 오류가 발생합니다. 문자열선언적인 인증 사용 도움말
사용자 모델
class User < ActiveRecord::Base
acts_as_authentic
ROLES = %w[admin moderator subscriber]
#Each user can subscribe to many channels
has_and_belongs_to_many :channels
#Each user who is a moderator can moderate many channels
#has_many :channel_mods
#has_many :channels, :through => :channel_mods
#Each user can receive many messages
has_and_belongs_to_many :messages
#Filter users by role(s)
named_scope :with_role, lambda { |role| {:conditions => "roles_mask & #{2**ROLES.index(role.to_s)} > 0 "} }
def roles
ROLES.reject { |r| ((roles_mask || 0) & 2**ROLES.index(r)).zero? }
end
def roles=(roles)
self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum
end
def role_symbols
roles.map do |role|
role.name.underscore.to_sym
end
end
end
채널 : 나는 또한 가입자에게
"관리"에 대한 정의되지 않은 메서드`이름 '으로 기본 역할을하는 방법을 찾기 위해 노력했다 제어기
class ChannelsController < ApplicationController filter_resource_access helper_method :require_user def index if current_user @channels = Channel.find(:all) else flash[:notice] = "You must first login or register before accessing or site" redirect_to :login end end def show if current_user #@channel = Channel.find(params[:id]) @message = Message.new(:channel => @channel) else flash[:notice] = "You must first login or register before accessing or site" redirect_to :login end end def new if current_user #@channel = Channel.new else flash[:notice] = "You must first login or register before accessing or site" redirect_to :login end end def create #@channel = Channel.new(params[:channel]) if @channel.save flash[:notice] = "Successfully created channel." redirect_to @channel else render :action => 'new' end end def edit if current_user #@channel = Channel.find(params[:id]) else flash[:notice] = "You must first login or register before accessing or site" redirect_to :login end end def update #@channel = Channel.find(params[:id]) if @channel.update_attributes(params[:channel]) flash[:notice] = "Successfully updated channel." redirect_to @channel else render :action => 'edit' end end def destroy #@channel = Channel.find(params[:id]) @channel.destroy flash[:notice] = "Successfully destroyed channel." redirect_to channels_url end end
authorization_rules.rb
authorization do role :admin do has_permission_on [:all], :to => [:index, :show, :new, :create, :edit, :update, :destroy] end role :subscriber do includes :guest has_permission_on :channels_users, :to => [:new, :create, :edit, :update, :destroy] do if_attribute :user_id => is{user_id} end end role :guest do has_permission_on :channels, :to => [:index, :show] has_permission_on :messages, :to => [:index, :show] has_permission_on :users, :to => [:index, :show] end role :moderator do includes :guest has_permission_on [:channels] , :to=> [:edit, :update] do if_attribute :moderator => is{user} end has_permission_on [:messages], :to=> [:edit, :update] do if_attribute :moderator => is{user} end has_permission_on [:messages], :to =>[:create, :new] end end
에 WEBrick 오류
Permission denied: No matching rules found for index for #<User id: 1, login: "antarrbyrd", crypted_password: "2116af494 6914553db0589fe78e957122c9d5c017d5f99b4f0b...", password_salt: "9M9OIdBcQs11sF0ycn1b", persistence_token: "923c03ca2989b 0d7e862c6e6beb02ab09ec97b1675c27900142...", first_name: "Antarr", last_name: "Byrd", login_count: 13, last_request_at: " 2010-12-06 01:06:14", telephone: "8324051056", email: "[email protected]", last_login_at: "2010-12-05 09:10:26", cur rent_login_at: "2010-12-06 01:02:22", last_login_ip: "127.0.0.1", current_login_ip: "127.0.0.1", carrier_name: nil, mode rator: nil, created_at: "2010-12-04 05:47:16", updated_at: "2010-12-06 01:06:14", roles_mask: 1, perishable_token: "3ssc XJhlfYE8tIKSRa0U"> (roles [:admin], privileges [:index], context :channels).
감사합니다. 그 문제가 해결되었다고 생각합니다. 나는 레일에서 어떤 오류도 내지 않고 있지만 파이어 폭스는 "파이어 폭스가 서버가이 주소에 대한 요청을 결코 완료하지 않을 방법으로 리디렉션 중임을 발견했다"고 말하고있다. –
그래, 서버 콘솔에 오류가 있음을 발견했습니다. 하지만 내 생각 엔 내 권한을 수정해야합니다. –
아마도이 질문에 답을 표시하거나 질문에 정답을 넣어서 다른 사람들이 당신이 한 일을 알 수있게 할 수 있습니다. 또 다른 메모에서 나는 decl_auth에 대해서도 문제가 있습니다. 여러분 중 누구라도 한번보세요. 당신이 저 한테 도와 줄 수 있는지 알아보십시오. http://stackoverflow.com/questions/4631218/how-do-i -access-a-user-with-a-specific-role-in-rails-3 – marcamillion