Sha256: 62406c6e3e53b720438149e366d9d9b001ce234903df09e6944754dfcdf615ad

Contents?: true

Size: 2 KB

Versions: 6

Compression:

Stored size: 2 KB

Contents

module Spider; module Auth

    module RBACProvider
        
        def self.included(model)
            model.extend(ClassMethods)
        end
        
        def can?(permission, context=nil)
            context ||= self.class.rbac_contexts.first
            el = self.class.rbac_provider_elements[context]
            options = RBAC.options(context)
            if options[:superuser]
                val = self.get(options[:superuser])
                return true if val
            end
            val = self.get(el)
            val.each do |v|
                return true if v.id.to_sym == permission.to_sym
            end
            self.class.rbac_inherit_from.each do |element|
                val = self.get(element)
                val = [val] unless val.is_a?(Enumerable)
                val.each do |v|
                    return true if v.can?(permission, context)
                end
            end
            return false
        end
        
        module ClassMethods
            
            def rbac_contexts
                (@rbac_provider_elements || {}).keys
            end
            
            def rbac_provider_for(context)
                @rbac_provider_elements ||= {}
                @rbac_provider_elements[context] = :"#{context}_permissions"
                self.multiple_choice @rbac_provider_elements[context], RBAC.context(context),
                    :label => _("%s permissions") % context.to_s.gsub(/_+/, ' ').capitalize,
                    :inline_model => [[:id, String, {:primary_key => true}], [:desc, String]]
                self.elements[@rbac_provider_elements[context]].type.translate = true
            end
            
            def rbac_provider_elements
                @rbac_provider_elements || {}
            end
            
            def rbac_inherit_from(element=nil)
                @rbac_inherit_from ||= []
                @rbac_inherit_from << element if element
                @rbac_inherit_from
            end
            
        end
        
    end
    
end; end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
spiderfw-0.5.19 apps/core/auth/models/mixins/rbac_provider.rb
spiderfw-0.5.18 apps/core/auth/models/mixins/rbac_provider.rb
spiderfw-0.5.17 apps/core/auth/models/mixins/rbac_provider.rb
spiderfw-0.5.16 apps/core/auth/models/mixins/rbac_provider.rb
spiderfw-0.5.15 apps/core/auth/models/mixins/rbac_provider.rb
spiderfw-0.5.14 apps/core/auth/models/mixins/rbac_provider.rb