2010-12-06 7 views
0

Ich versuche, deblitive Auth zu verwenden, um den Zugriff auf meine Website zu steuern. Aber wenn ich filter_resource_access verwende, bekomme ich diesen Fehler. Ich versuche auch, um herauszufinden, wie die Standardrolle machen Teilnehmer für "admin"Hilfe mit declaritive auth

nicht definierte Methode `Name‘ zu sein: String

Benutzermodell

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 

Kanal Controller

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 Fehler

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). 

Antwort

1

Hier ist ein Problem behoben:

def role_symbols 
    roles.map do |role| 
    role.underscore.to_sym # NOT role.name.underscore.to_sym (role is a string) 
    end 
end 

die Sie interessieren und sehen, ob es funktioniert. Ansonsten poste bitte irgendwelche Fehlermeldungen.

+0

Danke Ich glaube, dass es dieses Problem behoben hat. Ich bekomme keine Fehler von den Schienen, aber Firefox sagt: "Firefox hat festgestellt, dass der Server die Anfrage für diese Adresse auf eine Weise umleitet, die niemals abgeschlossen wird." –

+0

Ok, ich habe festgestellt, dass der Fehler in der Serverkonsole oben steht. Aber ich muss meine Berechtigungen ändern. –

+0

Vielleicht können Sie diese Frage markieren oder die richtige Antwort in Ihre Frage eingeben, damit andere, die mitkommen, wissen können, was Sie getan haben. Ein weiterer Hinweis, ich habe Probleme mit decl_auth auch ... kann jemand von euch schauen und sehen, ob Sie mir dabei helfen können: http://stackoverflow.com/questions/4631218/how-do-i -access-a-user-mit-einer-spezifischen-Rolle-in-rails-3 – marcamillion