getting a subdomain name in model.

Hi all,

I am facing problem in getting subdomain name inside the model. The following is my setup.

I am using cancan for authorization.I wanted a specific condition in Ability.rb ( the file which is placed in models if we install cancan gem).

Below is the condition I wanted:

Hi All,

can somebody help me on this.

--Siva

Hi all,

I am facing problem in getting subdomain name inside the model. The following is my setup.

I am using cancan for authorization.I wanted a specific condition in Ability.rb ( the file which is placed in models if we install cancan gem).

Below is the condition I wanted:

=========================================================

user ||= User.new # guest user (not logged in)
if (user.role == ‘admin’ && user.site_name == current_subdomain_name)
can :manage, :all
else
can :read, :all

  end

=======================================================

current_subdomain_name should be the name of the subdomain on which user is browsing. But i could not get it.

I have tried the following was but could not succeed.

  1. setting a current_subdomain_name as a global variable in the application controller and using the global variable. (using ruby debugger i found that the global variable is having nil in it)
  1. i have a method current_subdomain_name in the application helper which returns what i wanted, I included the same inside the ability model and tried to use the method . But was getting error .
  1. writting a mehod in controller such that it returns what i wanted and use the same in the model.Still could not succeed.

See if this works

class Ability

include CanCan::Ability

def initialize(user, subdomain) #subdomain should now contain the current subdomain

user ||= User.new

end

end

Then in your application controller

def current_ability

@current_ability ||= Ability.new(current_user, current_subdomain_name)

end

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user.admin?
      can :manage, :all
    else
      can :read, :all
    end
  end
end

Hi
have you tried the method request.subdomain
Checkout the railscast on subdomains for more info
http://railscasts.com/episodes/221-subdomains-in-rails-3

Bye
Rik

Jim

Thanks it worked,

–Nror