ecm_rbac 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +37 -0
  4. data/Rakefile +17 -0
  5. data/app/assets/javascripts/ecm/rbac/application.js +13 -0
  6. data/app/assets/stylesheets/ecm/rbac/application.css +14 -0
  7. data/app/controllers/ecm/rbac/application_controller.rb +6 -0
  8. data/app/helpers/ecm/rbac/application_helper.rb +6 -0
  9. data/app/models/concerns/model/ecm/rbac/user_concern.rb +26 -0
  10. data/app/models/concerns/model/flag_from_time_range_concern.rb +26 -0
  11. data/app/models/ecm/rbac/permission.rb +45 -0
  12. data/app/models/ecm/rbac/role.rb +43 -0
  13. data/app/models/ecm/rbac/role_permission.rb +20 -0
  14. data/app/models/ecm/rbac/user_role.rb +17 -0
  15. data/app/services/ecm/rbac/import_default_permissions_service.rb +115 -0
  16. data/app/views/layouts/ecm/rbac/application.html.erb +14 -0
  17. data/config/locales/de.yml +28 -0
  18. data/config/routes.rb +2 -0
  19. data/db/migrate/20160301103116_create_ecm_rbac_roles.rb +11 -0
  20. data/db/migrate/20160301103202_create_ecm_rbac_user_roles.rb +10 -0
  21. data/db/migrate/20160301103219_create_ecm_rbac_permissions.rb +11 -0
  22. data/db/migrate/20160301103240_create_ecm_rbac_role_permissions.rb +10 -0
  23. data/lib/active_model/validations/file_readability_validator.rb +25 -0
  24. data/lib/ecm/rbac/configuration.rb +18 -0
  25. data/lib/ecm/rbac/engine.rb +7 -0
  26. data/lib/ecm/rbac/version.rb +5 -0
  27. data/lib/ecm/rbac.rb +11 -0
  28. data/lib/ecm_rbac.rb +2 -0
  29. data/lib/generators/ecm/rbac/install/install_generator.rb +15 -0
  30. data/lib/generators/ecm/rbac/install/templates/initializer.rb +7 -0
  31. data/lib/tasks/ecm/rbac_tasks.rake +4 -0
  32. metadata +89 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: db4210d9455f2ae61b936671e2f2c5ff834a99cb
4
+ data.tar.gz: 3f086b39256ae0613d7bd043031e26cddabf9f4d
5
+ SHA512:
6
+ metadata.gz: 45e1c6eb54c7bdafc93eceaf0653ff0eeaadd72fa7f49f6b117b36f0134b3877f8b32966647126a01382a35d667d62ffc84671ba35522b828f935850cba3c5b8
7
+ data.tar.gz: 498a5162e9ac3072fbdf50cc96fb0445e856fde8fcebd6264f9f9aa92ccea94f1693aaa255aed67ae76305e03088dd247011d0de9a384aa725fcf2e394e510fc
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2016 Roberto Vasquez Angel
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,37 @@
1
+ = Ecm::Rbac
2
+
3
+ This module implements role based access control on top of pundit.
4
+
5
+
6
+ = Why?
7
+
8
+ * Flexible handling of roles, role permissions, permissions and user permissions in the database.
9
+ * Automatic mapping of controllers and actions to permissions.
10
+
11
+
12
+ = Installation
13
+
14
+ Add it to your gemfile, bundle and run installer:
15
+
16
+ echo "\ngem 'ecm_rbac'" >> Gemfile
17
+ bundle
18
+ rails g ecm:rbac:install
19
+
20
+ The installer will add an initializer with configuration options in initializers/ecm_rbac.rb
21
+
22
+ Add the database migrations and migrate:
23
+
24
+ rake ecm_rbac:install:migrations
25
+ rake db:migrate
26
+
27
+
28
+ = Configuration
29
+
30
+ Possible options in the initializer:
31
+
32
+ * user_class_name: The class of the user model. Default is User.
33
+
34
+
35
+ = License
36
+
37
+ This project rocks and uses MIT-LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Ecm::Rbac'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,13 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file.
9
+ //
10
+ // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require_tree .
@@ -0,0 +1,14 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
+ * files in this directory. It is generally better to create a new file per style scope.
11
+ *
12
+ *= require_tree .
13
+ *= require_self
14
+ */
@@ -0,0 +1,6 @@
1
+ module Ecm
2
+ module Rbac
3
+ class ApplicationController < ActionController::Base
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Ecm
2
+ module Rbac
3
+ module ApplicationHelper
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,26 @@
1
+ module Model
2
+ module Ecm
3
+ module Rbac
4
+ module UserConcern
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ # associations
9
+ has_many :user_roles, class_name: 'Ecm::Rbac::UserRole', inverse_of: :user
10
+ has_many :roles, class_name: 'Ecm::Rbac::Role', through: :user_roles
11
+ has_many :role_permissions, class_name: 'Ecm::Rbac::RolePermission', through: :roles
12
+ has_many :permissions, through: :role_permissions, class_name: 'Ecm::Rbac::Permission'
13
+
14
+ has_many :enabled_roles, -> { enabled }, class_name: 'Ecm::Rbac::Role', through: :user_roles # , source: :user
15
+ has_many :enabled_role_permissions, class_name: 'Ecm::Rbac::RolePermission', through: :enabled_roles, source: :user_roles
16
+
17
+ has_many :enabled_permissions, through: :enabled_role_permissions, class_name: 'Ecm::Rbac::Permission', source: :permission
18
+ end
19
+
20
+ def allowed_to?(permission_name)
21
+ enabled_permissions.map(&:identifier).map(&:to_sym).include?(permission_name.to_sym)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ module Model
2
+ module FlagFromTimeRangeConcern
3
+ extend ActiveSupport::Concern
4
+
5
+ class_methods do
6
+ def flag_from_time_range(*args)
7
+ options = args.extract_options!
8
+ attributes = args
9
+
10
+ attributes.each do |attribute|
11
+ method_name_base = attribute.to_s.chomp('?')
12
+ define_method attribute do
13
+ time_range = (send("#{method_name_base}_from")..send("#{method_name_base}_to"))
14
+ time_range.cover? Time.zone.now
15
+ end
16
+
17
+ define_singleton_method method_name_base do
18
+ t = arel_table
19
+ now = Time.zone.now
20
+ where(t["#{method_name_base}_from"].lteq(now)).where(t["#{method_name_base}_to"].gteq(now))
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,45 @@
1
+ require 'model/flag_from_time_range_concern'
2
+
3
+ module Ecm::Rbac
4
+ class Permission < ActiveRecord::Base
5
+ include Model::FlagFromTimeRangeConcern
6
+
7
+ DEFAULTS = {
8
+ enabled_from: '01.01.1900 00:00:00',
9
+ enabled_to: '31.12.9999 23:59:59'
10
+ }
11
+
12
+ # associations
13
+ has_many :role_permissions, class_name: 'Ecm::Rbac::RolePermission'
14
+ has_many :roles, class_name: 'Ecm::Rbac::Role', through: :role_permissions
15
+ has_many :user_roles, through: :roles, class_name: 'Ecm::Rbac::UserRole'
16
+ has_many :users, through: :user_roles, class_name: Ecm::Rbac::Configuration.user_class
17
+
18
+ has_many :enabled_roles, -> { enabled }, class_name: 'Ecm::Rbac::Role', through: :role_permissions, source: :permission
19
+ has_many :enabled_user_roles, class_name: 'Ecm::Rbac::UserRole', through: :enabled_roles, source: :role_permissions
20
+
21
+ has_many :enabled_users, through: :enabled_user_roles, class_name: 'User', source: :user
22
+
23
+ flag_from_time_range :enabled?
24
+
25
+ # validations
26
+ validates :identifier, presence: true, uniqueness: true
27
+ validates :enabled_from, presence: true
28
+ validates :enabled_to, presence: true
29
+
30
+ # callbacks
31
+ after_initialize :set_defaults
32
+
33
+ def human
34
+ "#{self.class.model_name.human}: #{identifier}"
35
+ end
36
+
37
+ private
38
+
39
+ def set_defaults
40
+ return if persisted?
41
+ self.enabled_from = DEFAULTS[:enabled_from]
42
+ self.enabled_to = DEFAULTS[:enabled_to]
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,43 @@
1
+ require 'model/flag_from_time_range_concern'
2
+
3
+ module Ecm::Rbac
4
+ class Role < ActiveRecord::Base
5
+ include Model::FlagFromTimeRangeConcern
6
+
7
+ DEFAULTS = {
8
+ enabled_from: '01.01.1900 00:00:00',
9
+ enabled_to: '31.12.9999 23:59:59'
10
+ }
11
+
12
+ # associations
13
+ has_many :user_roles, class_name: 'Ecm::Rbac::UserRole', inverse_of: :role
14
+ has_many :users, through: :user_roles # , class_name: Ecm::Rbac::Configuration.user_class
15
+
16
+ has_many :role_permissions, class_name: 'Ecm::Rbac::RolePermission'
17
+ has_many :permissions, class_name: 'Ecm::Rbac::Permission', through: :role_permissions
18
+
19
+ has_many :enabled_permissions, -> { enabled }, class_name: 'Ecm::Rbac::Permission', through: :role_permissions, source: :role
20
+
21
+ flag_from_time_range :enabled?
22
+
23
+ # validations
24
+ validates :identifier, presence: true, uniqueness: true
25
+ validates :enabled_from, presence: true
26
+ validates :enabled_to, presence: true
27
+
28
+ # callbacks
29
+ after_initialize :set_defaults
30
+
31
+ def human
32
+ "#{self.class.model_name.human}: #{identifier}"
33
+ end
34
+
35
+ private
36
+
37
+ def set_defaults
38
+ return if persisted?
39
+ self.enabled_from = DEFAULTS[:enabled_from]
40
+ self.enabled_to = DEFAULTS[:enabled_to]
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,20 @@
1
+ module Ecm::Rbac
2
+ class RolePermission < ActiveRecord::Base
3
+ # associations
4
+ belongs_to :permission
5
+ belongs_to :role
6
+ has_many :user_roles, through: :role
7
+ has_many :users, through: :user_roles
8
+
9
+ # belongs_to :enabled_permission, foreign_key: 'permission_id', class_name: 'Ecm::Rbac::Permission'
10
+
11
+ belongs_to :enabled_role, -> { enabled }, foreign_key: 'role_id', class_name: 'Ecm::Rbac::Role'
12
+ has_many :enabled_user_roles, through: :enabled_role, source: :user_roles
13
+ has_many :enabled_users, through: :enabled_user_roles, source: :enabled_role_permissions
14
+
15
+ # validations
16
+ validates :permission, presence: true
17
+ validates :permission_id, uniqueness: { scope: :role_id }
18
+ validates :role, presence: true
19
+ end
20
+ end
@@ -0,0 +1,17 @@
1
+ module Ecm::Rbac
2
+ class UserRole < ActiveRecord::Base
3
+ # associations
4
+ belongs_to :user, class_name: Ecm::Rbac::Configuration.user_class, foreign_key: 'user_id', inverse_of: :user_roles
5
+ # belongs_to :enabled_user, foreign_key: 'user_id', class_name: 'User'
6
+ belongs_to :role, inverse_of: :user_roles
7
+
8
+ belongs_to :enabled_role, -> { enabled }, foreign_key: 'role_id', class_name: 'Ecm::Rbac::Role'
9
+ has_many :enabled_role_permissions, through: :enabled_role, source: :user_roles, class_name: 'Ecm::Rbac::RolePermission'
10
+ has_many :enabled_permissions, through: :enabled_role_permissions, class_name: 'Ecm::Rbac::Permission', source: :permission
11
+
12
+ # validations
13
+ validates :user, presence: true
14
+ validates :user_id, uniqueness: { scope: :role_id }
15
+ validates :role, presence: true
16
+ end
17
+ end
@@ -0,0 +1,115 @@
1
+ require_dependency 'itsf_services'
2
+ require_dependency 'active_model/validations/file_readability_validator'
3
+
4
+ module Ecm::Rbac
5
+ class ImportDefaultPermissionsService < Itsf::Services::V2::Service::Base
6
+ class Response < Itsf::Services::V2::Response::Base
7
+ attr_accessor :permissions, :roles, :role_permissions
8
+ end
9
+
10
+ attr_accessor :filename
11
+
12
+ validates :filename, file_readability: true
13
+
14
+ def do_work
15
+ say 'Start'
16
+ say 'Validating input', indent: 1
17
+ unless valid?
18
+ say "Inputs are invalid. Errors: #{errors.full_messages.to_sentence}", indent: 1
19
+ say 'Aborted'
20
+ return response
21
+ end
22
+ say 'Input is valid', indent: 1
23
+
24
+ load_yaml
25
+ return response unless yaml_structure_valid?
26
+
27
+ load_permissions
28
+ load_roles
29
+
30
+ response.permissions = create_or_update_permissions
31
+ response.roles = create_or_update_roles
32
+ response.role_permissions = create_or_update_role_permissions
33
+ say 'Done'
34
+ respond
35
+ end
36
+
37
+ private
38
+
39
+ def create_or_update_permissions
40
+ permissions = @permissions.collect do |permission_identifier|
41
+ Ecm::Rbac::Permission.where(identifier: permission_identifier).first_or_initialize.tap do |permission|
42
+ permission.save!
43
+ end
44
+ end
45
+ say "Saved #{permissions.count} permissions", indent: 1
46
+ permissions
47
+ end
48
+
49
+ def create_or_update_roles
50
+ roles = @roles.collect do |role_identifier, permissions|
51
+ Ecm::Rbac::Role.where(identifier: role_identifier).first_or_initialize.tap do |role|
52
+ role.save!
53
+ end
54
+ end
55
+ say "Saved #{roles.count} roles", indent: 1
56
+ roles
57
+ end
58
+
59
+ def create_or_update_role_permissions
60
+ role_permissions = @roles.collect do |role_identifier, permissions|
61
+ role = Ecm::Rbac::Role.where(identifier: role_identifier).first
62
+ permissions.collect do |permission_identifier|
63
+ permission = Ecm::Rbac::Permission.where(identifier: permission_identifier).first
64
+
65
+ Ecm::Rbac::RolePermission.where(role_id: role, permission_id: permission).first_or_initialize.tap do |role_permission|
66
+ role_permission.save!
67
+ end
68
+ end
69
+ end.flatten
70
+ say "Saved #{role_permissions.count} role permissions", indent: 1
71
+ role_permissions
72
+ end
73
+
74
+ def load_permissions
75
+ @permissions = @yaml[:defaults][:permissions]
76
+ say "Loaded #{@permissions.size} permissions", indent: 1
77
+ end
78
+
79
+ def load_roles
80
+ @roles = @yaml[:defaults][:roles]
81
+ say "Loaded #{@roles.size} roles", indent: 1
82
+ end
83
+
84
+ def load_yaml
85
+ @yaml = YAML.load_file(filename).with_indifferent_access
86
+ say "Loaded YAML from #{filename}", indent: 1
87
+ end
88
+
89
+ def yaml_structure_valid?
90
+ say "Checking for valid YAML structure", indent: 1
91
+ unless @yaml.is_a?(Hash)
92
+ add_error_and_say(:yaml_file, "Expected file content of #{filename} to parse to a Hash, but was #{@yaml.class}")
93
+ return false
94
+ end
95
+
96
+ unless @yaml.has_key?(:defaults)
97
+ add_error_and_say(:yaml_file, "Expected yaml in #{filename} to have the key [defaults:].")
98
+ return false
99
+ end
100
+
101
+ unless @yaml[:defaults].has_key?(:roles)
102
+ add_error_and_say(:yaml_file, "Expected yaml in #{filename} to have the key [defaults:][roles:].")
103
+ return false
104
+ end
105
+
106
+
107
+ unless @yaml[:defaults].has_key?(:permissions)
108
+ add_error_and_say(:yaml_file, "Expected yaml in #{filename} to have the key [defaults:][permissions:].")
109
+ return false
110
+ end
111
+
112
+ return true
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Rbac</title>
5
+ <%= stylesheet_link_tag "ecm/rbac/application", media: "all" %>
6
+ <%= javascript_include_tag "ecm/rbac/application" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
@@ -0,0 +1,28 @@
1
+ de:
2
+ activerecord:
3
+ attributes:
4
+ ecm/rbac/permission:
5
+ actions: Aktionen
6
+ created_at: Erstellt am
7
+ enabled?: Aktiv
8
+ enabled_from: Aktiv ab
9
+ enabled_to: Aktiv bis
10
+ identifier: Bezeichner
11
+ updated_at: Aktualisiert am
12
+ ecm/rbac/role:
13
+ actions: Aktionen
14
+ created_at: Erstellt am
15
+ enabled?: Aktiv
16
+ enabled_from: Aktiv ab
17
+ enabled_to: Aktiv bis
18
+ identifier: Bezeichner
19
+ updated_at: Aktualisiert am
20
+ models:
21
+ ecm/rbac/permission:
22
+ one: Berechtigung
23
+ other: Berechtigungen
24
+ ecm/rbac/role:
25
+ one: Rolle
26
+ other: Rollen
27
+ classes:
28
+ ecm/rbac/import_default_permissions_service: Dienst zum Einrichten von Berechtigungen
data/config/routes.rb ADDED
@@ -0,0 +1,2 @@
1
+ Ecm::Rbac::Engine.routes.draw do
2
+ end
@@ -0,0 +1,11 @@
1
+ class CreateEcmRbacRoles < ActiveRecord::Migration
2
+ def change
3
+ create_table :ecm_rbac_roles do |t|
4
+ t.string :identifier
5
+ t.timestamp :enabled_from
6
+ t.timestamp :enabled_to
7
+
8
+ t.timestamps null: false
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ class CreateEcmRbacUserRoles < ActiveRecord::Migration
2
+ def change
3
+ create_table :ecm_rbac_user_roles do |t|
4
+ t.integer :user_id, index: true
5
+ t.integer :role_id, index: true
6
+
7
+ t.timestamps null: false
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ class CreateEcmRbacPermissions < ActiveRecord::Migration
2
+ def change
3
+ create_table :ecm_rbac_permissions do |t|
4
+ t.string :identifier
5
+ t.timestamp :enabled_from
6
+ t.timestamp :enabled_to
7
+
8
+ t.timestamps null: false
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ class CreateEcmRbacRolePermissions < ActiveRecord::Migration
2
+ def change
3
+ create_table :ecm_rbac_role_permissions do |t|
4
+ t.integer :role_id, index: true
5
+ t.integer :permission_id, index: true
6
+
7
+ t.timestamps null: false
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,25 @@
1
+ module ActiveModel
2
+ module Validations
3
+ class FileReadabilityValidator < ::ActiveModel::EachValidator
4
+ def validate_each(record, attribute, value)
5
+ filename = File.expand_path(value) if !value.nil? && value.respond_to?(:to_s)
6
+ if filename.nil?
7
+ record.errors.add(attribute, options[:message] || :filename_is_nil)
8
+ return
9
+ end
10
+ unless File.exists?(filename)
11
+ record.errors.add(attribute, options[:message] || :file_not_existent, filename: filename)
12
+ return
13
+ end
14
+ unless File.file?(filename)
15
+ record.errors.add(attribute, options[:message] || :file_not_file, filename: filename)
16
+ return
17
+ end
18
+ unless File.readable?(filename)
19
+ record.errors.add(attribute, options[:message] || :file_not_readable, filename: filename)
20
+ return
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,18 @@
1
+ require 'active_support/core_ext/module/delegation'
2
+ require 'active_support/core_ext/module/attribute_accessors'
3
+
4
+ module Ecm
5
+ module Rbac
6
+ module Configuration
7
+ def configure
8
+ yield self
9
+ end
10
+
11
+ mattr_accessor(:user_class_name) { 'User' }
12
+
13
+ def self.user_class
14
+ user_class_name.constantize
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,7 @@
1
+ module Ecm
2
+ module Rbac
3
+ class Engine < ::Rails::Engine
4
+ isolate_namespace Ecm::Rbac
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module Ecm
2
+ module Rbac
3
+ VERSION = '0.0.2'.freeze
4
+ end
5
+ end
data/lib/ecm/rbac.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'ecm/rbac/configuration'
2
+
3
+ module Ecm
4
+ module Rbac
5
+ extend Configuration
6
+
7
+ def self.table_name_prefix
8
+ 'ecm_rbac_'
9
+ end
10
+ end
11
+ end
data/lib/ecm_rbac.rb ADDED
@@ -0,0 +1,2 @@
1
+ require 'ecm/rbac'
2
+ require 'ecm/rbac/engine'
@@ -0,0 +1,15 @@
1
+ module Ecm
2
+ module Rbac
3
+ module Generators
4
+ class InstallGenerator < Rails::Generators::Base
5
+ desc 'Generates the intializer'
6
+
7
+ source_root File.expand_path('../templates', __FILE__)
8
+
9
+ def generate_initializer
10
+ copy_file 'initializer.rb', 'config/initializers/ecm_rbac.rb'
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ Ecm::Rbac.configure do |config|
2
+ # Set the User class.
3
+ #
4
+ # Default: config.user_class_name = 'User'
5
+ #
6
+ config.user_class_name = 'User'
7
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :rbac do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ecm_rbac
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Roberto Vasquez Angel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-03-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Ecm::Rbac Module.
28
+ email:
29
+ - roberto@vasquez-angel.de
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - MIT-LICENSE
35
+ - README.rdoc
36
+ - Rakefile
37
+ - app/assets/javascripts/ecm/rbac/application.js
38
+ - app/assets/stylesheets/ecm/rbac/application.css
39
+ - app/controllers/ecm/rbac/application_controller.rb
40
+ - app/helpers/ecm/rbac/application_helper.rb
41
+ - app/models/concerns/model/ecm/rbac/user_concern.rb
42
+ - app/models/concerns/model/flag_from_time_range_concern.rb
43
+ - app/models/ecm/rbac/permission.rb
44
+ - app/models/ecm/rbac/role.rb
45
+ - app/models/ecm/rbac/role_permission.rb
46
+ - app/models/ecm/rbac/user_role.rb
47
+ - app/services/ecm/rbac/import_default_permissions_service.rb
48
+ - app/views/layouts/ecm/rbac/application.html.erb
49
+ - config/locales/de.yml
50
+ - config/routes.rb
51
+ - db/migrate/20160301103116_create_ecm_rbac_roles.rb
52
+ - db/migrate/20160301103202_create_ecm_rbac_user_roles.rb
53
+ - db/migrate/20160301103219_create_ecm_rbac_permissions.rb
54
+ - db/migrate/20160301103240_create_ecm_rbac_role_permissions.rb
55
+ - lib/active_model/validations/file_readability_validator.rb
56
+ - lib/ecm/rbac.rb
57
+ - lib/ecm/rbac/configuration.rb
58
+ - lib/ecm/rbac/engine.rb
59
+ - lib/ecm/rbac/version.rb
60
+ - lib/ecm_rbac.rb
61
+ - lib/generators/ecm/rbac/install/install_generator.rb
62
+ - lib/generators/ecm/rbac/install/templates/initializer.rb
63
+ - lib/tasks/ecm/rbac_tasks.rake
64
+ homepage: https://github.com/robotex82/ecm_rbac
65
+ licenses:
66
+ - MIT
67
+ metadata: {}
68
+ post_install_message:
69
+ rdoc_options: []
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ requirements: []
83
+ rubyforge_project:
84
+ rubygems_version: 2.4.8
85
+ signing_key:
86
+ specification_version: 4
87
+ summary: Ecm::Rbac.
88
+ test_files: []
89
+ has_rdoc: