devise_can 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 934d07c42518a35a3e89437c51ccd32b67815bbe
4
- data.tar.gz: 2cb334bd027c0f7b07e96a6ad009a1a0ae00224d
3
+ metadata.gz: 22a34ac3b6cb874e6ca8209a066f48f48119cd7a
4
+ data.tar.gz: 8ae3c0f0d99ca238d3587e4121c68520e366f4fc
5
5
  SHA512:
6
- metadata.gz: aad10371fe2ff05e9e638b03b1ea6fd30d711ae8c858b7913597640e6480763f28a64469f4bb7c47b5d4d3af71f376fb51e47bba60468941b0f8c1c239d9288f
7
- data.tar.gz: c1fab890221ea5b706d818d0bfe8d83bb32bb2735821a2216461049a2a1a045a0f0e0e80638b3ac78f1f07d0dbecb18d14005c6b6e858d6887567e4de5ec342a
6
+ metadata.gz: eb7805d06a2b115d63f087222333a2c54e2d1a0737ec73e9bb02aa1712e8164902574b823d7e061a60245f547063c9d0022316bab93b90ff97241f766ba1dc76
7
+ data.tar.gz: dbf135e81334f2e8d464e006e53406cc660d6301d0e71cf7ee193f8c266670e9a08f61a665ceccff06ba15b23c21fb4299bb59601d3b2f77baff0c4af81e4dd8
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # DeviseCan
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/devise_can`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ ## Why **devise_can** gem?
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ By `device_can` gem you'll get functionality of devise,cancancan and `user_role_association` that make your development easy.
6
6
 
7
7
  ## Installation
8
8
 
@@ -22,7 +22,196 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- TODO: Write usage instructions here
25
+ You need to follow all given steps i.e.
26
+
27
+ ## Generate devise component
28
+
29
+ `rails generate devise:install`
30
+
31
+
32
+ Now add `require 'devise'` to your config/application.rb
33
+
34
+
35
+
36
+ `rails generate devise user`
37
+
38
+
39
+ This will generate devise model with name `User`, you can either generate views and controller as well by following command:
40
+
41
+ `rails generate devise:views`
42
+
43
+
44
+ `rails generate devise:controllers users`
45
+
46
+
47
+
48
+ ## Generate association component
49
+
50
+ `rails generate association user_role`
51
+
52
+ It'll generate two models with name `Role` and `UserRole`
53
+
54
+ ```
55
+ class Role < ActiveRecord::Base
56
+ has_many :user_roles
57
+ has_many :users,through: :user_roles
58
+
59
+ validates :name,presence: true
60
+ end
61
+
62
+ ```
63
+
64
+
65
+ ```
66
+ class UserRole < ActiveRecord::Base
67
+ belongs_to :user
68
+ belongs_to :role
69
+ validates :user,presence: true
70
+ validates :role,presence: true
71
+ validates_uniqueness_of :user_id, scope: :role_id
72
+ end
73
+
74
+ ```
75
+
76
+ Add association into model `User` i.e.
77
+
78
+ ```
79
+ has_many :user_roles
80
+ has_many :roles,through: :user_roles
81
+
82
+ ```
83
+
84
+
85
+
86
+ ## Generate cancan component
87
+
88
+ `rails generate cancan:ability`
89
+
90
+ It'll create a model with name `Ability`
91
+
92
+
93
+ ## Generate permission component
94
+
95
+ `rails generate permission module`
96
+
97
+ It'll generate three models with name `ModuleAction` , `ModuleGroup` and `ModulePermission`.Each model looks like:
98
+
99
+ ```
100
+
101
+ class ModuleAction < ApplicationRecord
102
+ has_many :module_permissions
103
+ has_many :module_groups,through: :module_permissions
104
+ end
105
+
106
+ ```
107
+
108
+ This model will contain all module name like `User` or `Role` etc..
109
+
110
+ ```
111
+
112
+ class ModuleGroup < ApplicationRecord
113
+
114
+ has_many :module_permissions
115
+ has_many :module_actions,through: :module_permissions
116
+
117
+ end
118
+
119
+ ```
120
+
121
+ This model will contain all actions for controller like `create/new/index/update/show` etc..
122
+
123
+ ```
124
+
125
+ class ModulePermission < ApplicationRecord
126
+
127
+ belongs_to :module_group
128
+ belongs_to :module_action
129
+ belongs_to :role
130
+
131
+ end
132
+
133
+ ```
134
+
135
+ This model will contain association between `module_group` , `module_action` and `role`.
136
+
137
+
138
+ Now your ability.rb file should look like:
139
+
140
+ ```
141
+
142
+ class Ability
143
+ include CanCan::Ability
144
+
145
+ def initialize(user)
146
+ # Define abilities for the passed in user here. For example:
147
+ #
148
+ # user ||= User.new # guest user (not logged in)
149
+ # if user.admin?
150
+ # can :manage, :all
151
+ # else
152
+ # can :read, :all
153
+ # end
154
+ #
155
+ # The first argument to `can` is the action you are giving the user
156
+ # permission to do.
157
+ # If you pass :manage it will apply to every action. Other common actions
158
+ # here are :read, :create, :update and :destroy.
159
+ #
160
+ # The second argument is the resource the user can perform the action on.
161
+ # If you pass :all it will apply to every resource. Otherwise pass a Ruby
162
+ # class of the resource.
163
+ #
164
+ # The third argument is an optional hash of conditions to further filter the
165
+ # objects.
166
+ # For example, here the user can only update published articles.
167
+ #
168
+ # can :update, Article, :published => true
169
+ #
170
+ # See the wiki for details:
171
+ # https://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities
172
+
173
+ if user.roles.pluck(:name).include?('superadmin')
174
+ can :manage, :all
175
+ else
176
+ user.roles.map{|role| role.module_permissions}.each do |permissions|
177
+ permissions.each do |permission|
178
+ can permission.module_action.name.to_sym,permission.module_group.name.constantize
179
+ end
180
+ end
181
+ end
182
+
183
+
184
+
185
+
186
+ end
187
+ end
188
+
189
+
190
+ ```
191
+
192
+ Here superadmin is a role with all permissions on each module.
193
+
194
+ ## Run migrations
195
+
196
+ Now you need to run migrations for schema update
197
+
198
+ `rails db:migrate`
199
+
200
+ ## Other stuffs
201
+
202
+ Add following lines into your application controller:
203
+
204
+ ```
205
+
206
+ rescue_from CanCan::AccessDenied do |exception|
207
+ flash[:warning] = exception.message
208
+ redirect_to root_path
209
+ end
210
+
211
+ ```
212
+ It'll check ability.rb on each action and reirect to `root_path` if found unpermitted action.
213
+
214
+
26
215
 
27
216
  ## Development
28
217
 
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["Raghav.Singh@lptpl.com"]
11
11
 
12
12
  spec.summary = %q{This gem is to use for devise,cancancan and user role association.}
13
- spec.description = %q{Enjoy the functionality of this gem.}
13
+ spec.description = %q{Integrate devise,cancancan and user roles together for easy implementation.}
14
14
  spec.homepage = "https://github.com/RaghavVishnoi/devise_can.git"
15
15
  spec.license = "MIT"
16
16
 
@@ -1,3 +1,3 @@
1
1
  module DeviseCan
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise_can
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - RaghavSingh
@@ -66,7 +66,7 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- description: Enjoy the functionality of this gem.
69
+ description: Integrate devise,cancancan and user roles together for easy implementation.
70
70
  email:
71
71
  - Raghav.Singh@lptpl.com
72
72
  executables: []