rbacfull 0.1.1 → 0.1.2
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 +4 -4
- data/lib/generators/rbacfull/install_generator.rb +56 -1
- data/lib/generators/templates/helpers/user_helper.rb +33 -0
- data/lib/generators/templates/initializer.rb +7 -0
- data/lib/generators/templates/migrations/create_actions.rb +10 -0
- data/lib/generators/templates/migrations/create_permissions.rb +14 -0
- data/lib/generators/templates/migrations/create_roles.rb +10 -0
- data/lib/generators/templates/migrations/create_user_roles.rb +14 -0
- data/lib/generators/templates/models/action.rb +3 -0
- data/lib/generators/templates/models/permission.rb +4 -0
- data/lib/generators/templates/models/role.rb +3 -0
- data/lib/generators/templates/models/user_role.rb +4 -0
- data/lib/generators/templates/role-active_record.rb +11 -0
- data/lib/rbacfull.rb +57 -14
- data/lib/rbacfull/version.rb +1 -1
- data/rbacfull.gemspec +1 -0
- metadata +27 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b98292784d6cbfedd0e8fbf9b26b8683939c122
|
4
|
+
data.tar.gz: ce2a4276c4c35f6179b18413e20eebda2a6d05ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 651e76febe2b91aa907ab2307f9b3df5a48f4818d8468c0c0d67fb81a6002d62120f011cb9776078e6f6feafb56cacabc2cf8ff4679a2c0b21e986b6b315252b
|
7
|
+
data.tar.gz: fca49e4e8d16f64a3166165aababadc32ee3ca87aac54956780034315362c13a2d998ad0f5352a391d15a9e13d9378b350845b1e5190f5438f4cddb415e95c7b
|
@@ -2,11 +2,66 @@ require 'rails/generators'
|
|
2
2
|
|
3
3
|
module Rbacfull
|
4
4
|
class InstallGenerator < ::Rails::Generators::Base
|
5
|
+
include Rails::Generators::Migration
|
6
|
+
|
7
|
+
|
5
8
|
desc "This generator installs rbacfull files to your rails project"
|
9
|
+
source_root File.expand_path('../../templates', __FILE__)
|
6
10
|
|
7
11
|
def install
|
8
|
-
|
12
|
+
puts "Install gem's files"
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
def copy_migrations
|
17
|
+
copy_migration "create_user_roles"
|
18
|
+
copy_migration "create_roles"
|
19
|
+
copy_migration "create_actions"
|
20
|
+
copy_migration "create_permissions"
|
21
|
+
end
|
22
|
+
|
23
|
+
def copy_models
|
24
|
+
copy_model "role"
|
25
|
+
copy_model "action"
|
26
|
+
copy_model "permission"
|
27
|
+
copy_model "user_role"
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
def copy_helpers
|
32
|
+
copy_helper "user_helper"
|
33
|
+
|
9
34
|
end
|
10
35
|
|
36
|
+
|
37
|
+
|
38
|
+
protected
|
39
|
+
def copy_migration(filename)
|
40
|
+
if self.class.migration_exists?("db/migrate", "#{filename}")
|
41
|
+
say_status("skipped", "Migration #{filename}.rb already exists")
|
42
|
+
else
|
43
|
+
migration_template "migrations/#{filename}.rb", "db/migrate/#{filename}.rb"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def copy_model(filename)
|
48
|
+
if self.class.migration_exists?("app/models", "#{filename}")
|
49
|
+
say_status("skipped", "Model #{filename}.rb already exists")
|
50
|
+
else
|
51
|
+
copy_file "models/#{filename}.rb", "app/models/#{filename}.rb"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def copy_helper(filename)
|
56
|
+
if self.class.migration_exists?("app/helpers", "#{filename}")
|
57
|
+
say_status("skipped", "Helper #{filename}.rb already exists")
|
58
|
+
else
|
59
|
+
copy_file "helpers/#{filename}.rb", "app/helpers/#{filename}.rb"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.next_migration_number(dir)
|
64
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S%L")
|
65
|
+
end
|
11
66
|
end
|
12
67
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
|
2
|
+
# That's it! Now you have access to some awesome RBAC helper functions.
|
3
|
+
module UserHelper
|
4
|
+
# Determines if the user has one or more of the given roles linked to it.
|
5
|
+
#
|
6
|
+
# @param [String] args an argument list of one or more roles to check for.
|
7
|
+
# @return [true|false] true if the user is linked to at least one of the
|
8
|
+
# given roles.
|
9
|
+
def has_role?(*args)
|
10
|
+
throw Exception.new("Must supply at least one role.") if args.empty?
|
11
|
+
roles.where(name: args).count > 0
|
12
|
+
end
|
13
|
+
|
14
|
+
# Determines if the user has all of the given roles linked to it.
|
15
|
+
#
|
16
|
+
# @param [String] args an argument list of one or more roles to check for.
|
17
|
+
# @return [true|false] true if the user is linked to all of the given roles.
|
18
|
+
def has_roles?(*args)
|
19
|
+
throw Exception.new("Must supply at least one role.") if args.empty?
|
20
|
+
roles.where(name: args).count == args.count
|
21
|
+
end
|
22
|
+
|
23
|
+
# Determines if the user has permission to a given action. If the action
|
24
|
+
# does not exist at all, it is assumed the action is publicly available.
|
25
|
+
#
|
26
|
+
# @param [String] action name of the action to check permission for.
|
27
|
+
# @return [true|false] true if the user has at least one role linked to it
|
28
|
+
# with permission to the given action.
|
29
|
+
def has_permission?(action)
|
30
|
+
return true if Action.where(name: action).count == 0
|
31
|
+
actions.where(name: action).count > 0
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
Rbacfull.configure<%= "(\"#{class_name.camelize.to_s}\")" if class_name != "Role" %> do |config|
|
2
|
+
# By default ORM adapter is ActiveRecord. uncomment to use mongoid
|
3
|
+
<%= "# " if options.orm == :active_record || !options.orm %>config.use_mongoid
|
4
|
+
|
5
|
+
# Dynamic shortcuts for User class (user.is_admin? like methods). Default is: false
|
6
|
+
# config.use_dynamic_shortcuts
|
7
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreatePermissions < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :permissions do |t|
|
4
|
+
t.integer :role_id
|
5
|
+
t.integer :action_id
|
6
|
+
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
|
10
|
+
add_index :permissions, :role_id
|
11
|
+
add_index :permissions, :action_id
|
12
|
+
add_index :permissions, [:role_id, :action_id], unique: true
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateUserRoles < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :user_roles do |t|
|
4
|
+
t.integer :user_id
|
5
|
+
t.integer :role_id
|
6
|
+
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
|
10
|
+
add_index :user_roles, :user_id
|
11
|
+
add_index :user_roles, :role_id
|
12
|
+
add_index :user_roles, [:user_id, :role_id], unique: true
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class <%= role_cname.camelize %> < ActiveRecord::Base
|
2
|
+
<% if need_table_prefix?(role_cname) %>
|
3
|
+
def self.table_name_prefix
|
4
|
+
<%= table_prefix(role_cname) %>_
|
5
|
+
end
|
6
|
+
<% end %>
|
7
|
+
has_and_belongs_to_many :<%= user_cname.tableize %>, :join_table => :<%= "#{table_name(user_cname, true)}_#{table_name(role_cname, true)}" %>
|
8
|
+
belongs_to :resource, :polymorphic => true
|
9
|
+
|
10
|
+
scopify
|
11
|
+
end
|
data/lib/rbacfull.rb
CHANGED
@@ -1,25 +1,68 @@
|
|
1
1
|
require "rbacfull/version"
|
2
2
|
|
3
|
+
|
3
4
|
module Rbacfull
|
4
|
-
|
5
|
-
|
6
|
-
|
5
|
+
extend Configure
|
6
|
+
attr_accessor :role_cname, :adapter, :resource_adapter, :role_join_table_name, :role_table_name
|
7
|
+
@@resource_types = []
|
8
|
+
|
9
|
+
def rbacfull(options = {})
|
10
|
+
include Role
|
11
|
+
extend Dynamic if Rbacfull.dynamic_shortcuts
|
12
|
+
|
13
|
+
options.reverse_merge!({:role_cname => 'Role'})
|
14
|
+
self.role_cname = options[:role_cname]
|
15
|
+
self.role_table_name = self.role_cname.tableize.gsub(/\//, "_")
|
16
|
+
|
17
|
+
default_join_table = "#{self.to_s.tableize.gsub(/\//, "_")}_#{self.role_table_name}"
|
18
|
+
options.reverse_merge!({:role_join_table_name => default_join_table})
|
19
|
+
self.role_join_table_name = options[:role_join_table_name]
|
20
|
+
|
21
|
+
rbacfull_options = { :class_name => options[:role_cname].camelize }
|
22
|
+
rbacfull_options.merge!({ :join_table => self.role_join_table_name }) if Rbacfull.orm == "active_record"
|
23
|
+
rbacfull_options.merge!(options.reject{ |k,v| ![ :before_add, :after_add, :before_remove, :after_remove ].include? k.to_sym })
|
24
|
+
|
25
|
+
has_and_belongs_to_many :roles, rbacfull_options
|
26
|
+
|
27
|
+
self.adapter = Rbacfull::Adapter::Base.create("role_adapter", self.role_cname, self.name)
|
28
|
+
load_dynamic_methods if Rbacfull.dynamic_shortcuts
|
29
|
+
end
|
30
|
+
|
31
|
+
def adapter
|
32
|
+
return self.superclass.adapter unless self.instance_variable_defined? '@adapter'
|
33
|
+
@adapter
|
34
|
+
end
|
35
|
+
|
36
|
+
def resourcify(association_name = :roles, options = {})
|
37
|
+
include Resource
|
7
38
|
|
8
|
-
|
9
|
-
|
10
|
-
|
39
|
+
options.reverse_merge!({ :role_cname => 'Role', :dependent => :destroy })
|
40
|
+
resourcify_options = { :class_name => options[:role_cname].camelize, :as => :resource, :dependent => options[:dependent] }
|
41
|
+
self.role_cname = options[:role_cname]
|
42
|
+
self.role_table_name = self.role_cname.tableize.gsub(/\//, "_")
|
11
43
|
|
12
|
-
|
13
|
-
"hello, #{@name}, from rbacfull!"
|
14
|
-
end
|
44
|
+
has_many association_name, resourcify_options
|
15
45
|
|
16
|
-
|
17
|
-
|
18
|
-
|
46
|
+
self.resource_adapter = Rbacfull::Adapter::Base.create("resource_adapter", self.role_cname, self.name)
|
47
|
+
@@resource_types << self.name
|
48
|
+
end
|
19
49
|
|
50
|
+
def resource_adapter
|
51
|
+
return self.superclass.resource_adapter unless self.instance_variable_defined? '@resource_adapter'
|
52
|
+
@resource_adapter
|
53
|
+
end
|
20
54
|
|
21
|
-
|
55
|
+
def scopify
|
56
|
+
require "rbacfull/adapters/#{Rbacfull.orm}/scopes.rb"
|
57
|
+
extend Rbacfull::Adapter::Scopes
|
58
|
+
end
|
22
59
|
|
60
|
+
def role_class
|
61
|
+
return self.superclass.role_class unless self.instance_variable_defined? '@role_cname'
|
62
|
+
self.role_cname.constantize
|
63
|
+
end
|
23
64
|
|
65
|
+
def self.resource_types
|
66
|
+
@@resource_types
|
67
|
+
end
|
24
68
|
end
|
25
|
-
end
|
data/lib/rbacfull/version.rb
CHANGED
data/rbacfull.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbacfull
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tatarsky Vladimir
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: devise
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
description: description
|
56
70
|
email:
|
57
71
|
- v.tatarsky@telefonn.ru
|
@@ -68,6 +82,17 @@ files:
|
|
68
82
|
- bin/console
|
69
83
|
- bin/setup
|
70
84
|
- lib/generators/rbacfull/install_generator.rb
|
85
|
+
- lib/generators/templates/helpers/user_helper.rb
|
86
|
+
- lib/generators/templates/initializer.rb
|
87
|
+
- lib/generators/templates/migrations/create_actions.rb
|
88
|
+
- lib/generators/templates/migrations/create_permissions.rb
|
89
|
+
- lib/generators/templates/migrations/create_roles.rb
|
90
|
+
- lib/generators/templates/migrations/create_user_roles.rb
|
91
|
+
- lib/generators/templates/models/action.rb
|
92
|
+
- lib/generators/templates/models/permission.rb
|
93
|
+
- lib/generators/templates/models/role.rb
|
94
|
+
- lib/generators/templates/models/user_role.rb
|
95
|
+
- lib/generators/templates/role-active_record.rb
|
71
96
|
- lib/rbacfull.rb
|
72
97
|
- lib/rbacfull/version.rb
|
73
98
|
- rbacfull.gemspec
|