destiny-rails 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 74d859e56be2ac9ab06b49742840173d709e5982
4
+ data.tar.gz: ce77b034551f82e0ea741eb050cb0fc69d1fb86a
5
+ SHA512:
6
+ metadata.gz: 62b5d3964fe50f47381368fb2c229f52e5c574b2cd70dc3ddb45ea042574089a7e52a91d034b29a4d70adc968b14afbc657a17ee8818a199725daaeee9e1f73e
7
+ data.tar.gz: 6eac7004c879ca19cf9497edaad7379c5fe3f981e2c0f31b972c14ae61e8ae42cfe946903bec42a5abc3b46a4e5af6df4f671380e0128630d738553d8044641b
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.gem
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ destiny
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.4.0
data/README.md ADDED
@@ -0,0 +1,12 @@
1
+ # Destiny
2
+ Simple role managment system
3
+
4
+ Roles persisted in the database. Role is as a composition of grants. Roles may be assigned to user.
5
+
6
+ ## Installation
7
+
8
+ ### Rails
9
+
10
+ ```bash
11
+ rails g destiny:install
12
+ ```
@@ -0,0 +1,9 @@
1
+ module Destiny
2
+ module Controller
3
+
4
+ def grant_required
5
+ access_denied unless current_user.try(:has_grant?, controller_path, action_name)
6
+ end
7
+
8
+ end
9
+ end
@@ -0,0 +1,17 @@
1
+ module Destiny
2
+ module Role
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ has_and_belongs_to_many :users, join_table: :users_roles
7
+ end
8
+
9
+ def to_hash
10
+ data.to_hash
11
+ end
12
+
13
+ def role_hash
14
+ to_hash
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,36 @@
1
+ module Destiny
2
+ module User
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ has_and_belongs_to_many :roles, join_table: :users_roles
7
+ end
8
+
9
+ def has_grant?(section_name, grant_name)
10
+ return true if is_admin?
11
+ return false unless hash[section_name]
12
+ return false unless hash[section_name].key? grant_name
13
+
14
+ role_hash[section_name][grant_name]
15
+ end
16
+
17
+ def owner?(obj)
18
+ return id == obj.user_id if obj.respond_to? :user_id
19
+ end
20
+
21
+ def role_hash
22
+ @role_hash = {}
23
+ roles.map(&:to_hash).each_entry { |h| @role_hash.deep_merge!(h) }
24
+ @role_hash
25
+ end
26
+
27
+ def is_admin?
28
+ return true if role_hash.try(:[], 'system').try(:[], 'administrator')
29
+ end
30
+
31
+ # compatibility with The_Role gem
32
+ alias_method :admin?, :is_admin?
33
+ alias_method :has_role?, :has_grant?
34
+
35
+ end
36
+ end
data/destiny.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ ['../lib', '../app/models/concerns/destiny', '../app/controllers/concerns/destiny'].map{ |dir| File.expand_path(dir, __FILE__) }.each do |path|
2
+ $:.unshift(path) unless $:.include?(path)
3
+ end
4
+
5
+ require 'destiny/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'destiny-rails'
9
+ spec.version = Destiny::VERSION
10
+ spec.authors = ['Pavel Zhukov']
11
+ spec.email = ['pasha.zhukov@gmail.com']
12
+
13
+ spec.summary = %q{Simple role managment system}
14
+ spec.description = %q{Roles persisted in the database. Role is as a composition of grants. Roles may be assigned to user.}
15
+ spec.homepage = 'https://github.com/etxzay/destiny'
16
+ spec.license = 'MIT'
17
+
18
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
+ spec.require_paths = ['lib', 'app']
20
+
21
+ spec.add_development_dependency 'bundler', '~> 1.13'
22
+ spec.add_development_dependency 'rake', '~> 12.0'
23
+ spec.add_runtime_dependency 'activesupport', '~> 5.0'
24
+ spec.add_runtime_dependency 'activerecord', '~> 5.0'
25
+ end
@@ -0,0 +1,3 @@
1
+ module Destiny
2
+ VERSION = '0.0.3'
3
+ end
@@ -0,0 +1,6 @@
1
+ require 'destiny/version'
2
+ require 'role'
3
+ require 'user'
4
+ require 'controller'
5
+
6
+ module Destiny; end
@@ -0,0 +1,25 @@
1
+ module Destiny
2
+ module Generators
3
+ class InstallGenerator < ::Rails::Generators::Base
4
+ include Rails::Generators::Migration
5
+
6
+ source_root File.expand_path('../templates', __FILE__)
7
+
8
+ desc 'add migrations'
9
+
10
+ def self.next_migration_number(path)
11
+ unless @prev_migration_nr
12
+ @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
13
+ else
14
+ @prev_migration_nr += 1
15
+ end
16
+ @prev_migration_nr.to_s
17
+ end
18
+
19
+ def copy_migrations
20
+ migration_template 'create_roles.rb', 'db/migrate/create_roles.rb'
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,20 @@
1
+ class CreateRoles < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :roles do |t|
4
+ t.string :name, null: false
5
+ t.text :description, null: false
6
+ t.jsonb :data, null: false
7
+
8
+ t.timestamps
9
+ end
10
+
11
+ create_join_table :roles, :users, table_name: :users_roles
12
+
13
+ add_index :roles, :name, unique: true
14
+ end
15
+
16
+ def self.down
17
+ drop_table :users_roles
18
+ drop_table :roles
19
+ end
20
+ end
metadata ADDED
@@ -0,0 +1,114 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: destiny-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Pavel Zhukov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-03-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.13'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.13'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '12.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '12.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activerecord
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '5.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '5.0'
69
+ description: Roles persisted in the database. Role is as a composition of grants.
70
+ Roles may be assigned to user.
71
+ email:
72
+ - pasha.zhukov@gmail.com
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - ".gitignore"
78
+ - ".ruby-gemset"
79
+ - ".ruby-version"
80
+ - README.md
81
+ - app/controllers/concerns/destiny/controller.rb
82
+ - app/models/concerns/destiny/role.rb
83
+ - app/models/concerns/destiny/user.rb
84
+ - destiny.gemspec
85
+ - lib/destiny-rails.rb
86
+ - lib/destiny/version.rb
87
+ - lib/generators/destiny/install_generator.rb
88
+ - lib/generators/destiny/templates/create_roles.rb
89
+ homepage: https://github.com/etxzay/destiny
90
+ licenses:
91
+ - MIT
92
+ metadata: {}
93
+ post_install_message:
94
+ rdoc_options: []
95
+ require_paths:
96
+ - lib
97
+ - app
98
+ required_ruby_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ requirements: []
109
+ rubyforge_project:
110
+ rubygems_version: 2.6.8
111
+ signing_key:
112
+ specification_version: 4
113
+ summary: Simple role managment system
114
+ test_files: []