Sha256: d5da61849ea103fc2501050d479fc9c9210bfa1946078e41618c023dd4dea284
Contents?: true
Size: 1.15 KB
Versions: 1
Compression:
Stored size: 1.15 KB
Contents
module Aegis class Role attr_reader :name, :default_permission # permissions is a hash like: permissions[:edit_user] = lambda { |user| ... } def initialize(name, permissions, options) @name = name @permissions = permissions @default_permission = options[:default_permission] == :allow ? :allow : :deny freeze end def allow_by_default? @default_permission == :allow end def may?(permission, *args) # puts "may? #{permission}, #{args}" @permissions.may?(self, permission, *args) end def <=>(other) name.to_s <=> other.name.to_s end def to_s name.to_s.humanize end def id name.to_s end private def method_missing(symb, *args) method_name = symb.to_s if method_name =~ /^may_(.+)(\?|\!)$/ permission, severity = $1, $2 permission = Aegis::Normalization.normalize_permission(permission) may = may?(permission, *args) if severity == '!' && !may raise PermissionError, "Access denied: #{permission}" else may end else super end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
Chrononaut-aegis-1.2.0 | lib/aegis/role.rb |