Sha256: 9a44014e4b7bd887dc023a99153326d7acd8ce4cbcf0818a8e52b1aedffa4304
Contents?: true
Size: 1.74 KB
Versions: 2
Compression:
Stored size: 1.74 KB
Contents
module EgovUtils class ModelPermissions def self.build(model, user) klass = model klasses = [klass] while klass != klass.base_class klass = klass.superclass klasses << klass end klasses.each do |kls| perm_class = "#{kls.name}Permissions".safe_constantize return perm_class.new(user) if perm_class end EgovUtils::ModelPermissions.new(model, user) end attr_reader :model, :user def initialize(model, user) @model, @user = model, user end def readable_attributes(action=:show) model.column_names end def basic_editable_attributes(action=:update) model.column_names - ['id', 'updated_at', 'created_at'] end def basic_editable_attributes_for(entity, action=:update) basic_editable_attributes(action) end def editable_attributes(action=:update) attributes = basic_editable_attributes(action) assocs = model.reflect_on_all_associations.select{|assoc| model.method_defined?("#{assoc.name}_attributes=".to_sym) } attributes << assocs.each_with_object({}) {|assoc, obj| obj["#{assoc.name}_attributes"] = self.class.build(assoc.klass, user).editable_attributes(action) } attributes end #TODO nested attributes should take entity as well - what to do with has_many? def editable_attributes_for(entity, action=:update) attributes = basic_editable_attributes(action) assocs = model.reflect_on_all_associations.select{|assoc| model.method_defined?("#{assoc.name}_attributes=".to_sym) } attributes << assocs.each_with_object({}) {|assoc, obj| obj["#{assoc.name}_attributes"] = self.class.build(assoc.klass, user).editable_attributes_for(action) } attributes end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
egov_utils-0.3.1 | lib/egov_utils/model_permissions.rb |
egov_utils-0.3.0 | lib/egov_utils/model_permissions.rb |