Sha256: 08e547bf904b5365cf391dd641482ff9ec9d0e13d22bbdc04790d7fbddebbbd4

Contents?: true

Size: 1.15 KB

Versions: 3

Compression:

Stored size: 1.15 KB

Contents

module Radmin
  class Authorization
    class DSLMethods
      def role(role_name, &block)
        #::Authorization.define_method method_name, &block
        #role_name = role_name.to_sym
        Radmin::Authorization.roles[role_name] ||= []
        Radmin::Authorization.roles[role_name] << block
      end
    end

    include CanCan::Ability
    attr_accessor :user
    cattr_accessor :roles
    self.roles = {}

    def initialize(user)
      self.user = user
      run_role(:guest) unless self.user.role_symbols.any?
      self.user.role_symbols.each do |r|
        run_role(r)
      end
    end

    def includes(*role_names)
      role_names.each do |role_name|
        run_role(role_name.to_sym)
      end
    end

    def self.authorized?(user, action, subject)
      new(user).authorize!(action.to_sym, subject)
      true
    rescue CanCan::AccessDenied
      false
    end

    def self.define_rules(file)
      DSLMethods.new.instance_eval(File.read(file)) if File.exist?(file)
    end

    protected
    def run_role(role_name)
      self.class.roles[role_name].each { |block| instance_eval(&block) } if self.class.roles.include?(role_name)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
radmin-0.3.3 lib/radmin/authorization.rb
radmin-0.3.2 lib/radmin/authorization.rb
radmin-0.3.1 lib/radmin/authorization.rb