Sha256: 4d5f7fd84cbd9db2848000760bdbcb7bbd7556c52c17ee2cfaea23bc4cdaf9a7

Contents?: true

Size: 1.61 KB

Versions: 28

Compression:

Stored size: 1.61 KB

Contents

module Renalware
  # Responsible for determining if a user has access to a model based on a
  # configuration file.
  #
  # Example
  #
  # Based on the following configuration file in YAML format (e.g. config/permissions.yml):
  #
  #     super_admin:
  #       User
  #       Patient
  #     admin:
  #       Admission
  #       DrugType
  #
  # We can determine who has access to what models:
  #
  #    configuration = PolicyConfiguration.new(Patient)
  #    configuration.has_privilege?(user) # => true
  #
  #    configuration.has_privilege?(admin_user) # => false
  #
  # We can also determine if a model is restricted?
  #
  #    configuration = PolicyConfiguration.new(Patient)
  #    configuration.restricted? # => true
  #
  #    configuration = PolicyConfiguration.new(Drug)
  #    configuration.restricted? # => false
  #
  class YAMLPermissionConfiguration
    def initialize(model_class, filename = nil)
      @model_class = model_class
      @filename =  filename || default_filename
    end

    attr_reader :model_class, :filename

    def restricted?
      restricted_model_classes.include?(model_class.name)
    end

    def has_permission?(user)
      model_class.name.in? models_user_can_access(user)
    end

    private

    def models_user_can_access(user)
      user.role_names.flat_map { |role| config[role.to_sym] }.compact
    end

    def restricted_model_classes
      config.flat_map { |_, model_names| model_names }
    end

    def config
      @config ||= YAML.load_file(filename).symbolize_keys
    end

    def default_filename
      Renalware::Engine.root.join("config", "permissions.yml")
    end
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
renalware-core-2.0.8 app/policies/renalware/yaml_permission_configuration.rb
renalware-core-2.0.7 app/policies/renalware/yaml_permission_configuration.rb
renalware-core-2.0.5 app/policies/renalware/yaml_permission_configuration.rb
renalware-core-2.0.4 app/policies/renalware/yaml_permission_configuration.rb
renalware-core-2.0.3 app/policies/renalware/yaml_permission_configuration.rb
renalware-core-2.0.2 app/policies/renalware/yaml_permission_configuration.rb
renalware-core-2.0.1 app/policies/renalware/yaml_permission_configuration.rb
renalware-core-2.0.0 app/policies/renalware/yaml_permission_configuration.rb
renalware-core-2.0.0.pre.rc13 app/policies/renalware/yaml_permission_configuration.rb
renalware-core-2.0.0.pre.rc11 app/policies/renalware/yaml_permission_configuration.rb
renalware-core-2.0.0.pre.rc10 app/policies/renalware/yaml_permission_configuration.rb
renalware-core-2.0.0.pre.rc9 app/policies/renalware/yaml_permission_configuration.rb
renalware-core-2.0.0.pre.rc8 app/policies/renalware/yaml_permission_configuration.rb
renalware-core-2.0.0.pre.rc7 app/policies/renalware/yaml_permission_configuration.rb
renalware-core-2.0.0.pre.rc6 app/policies/renalware/yaml_permission_configuration.rb
renalware-core-2.0.0.pre.rc5 app/policies/renalware/yaml_permission_configuration.rb
renalware-core-2.0.0.pre.rc4 app/policies/renalware/yaml_permission_configuration.rb
renalware-core-2.0.0.pre.rc3 app/policies/renalware/yaml_permission_configuration.rb
renalware-core-2.0.0.pre.rc1 app/policies/renalware/yaml_permission_configuration.rb
renalware-core-2.0.0.pre.beta12 app/policies/renalware/yaml_permission_configuration.rb