usman 0.1.4 → 0.1.5dev
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/app/controllers/usman/admin/dashboard_controller.rb +1 -1
- data/app/controllers/usman/admin/features_controller.rb +2 -0
- data/app/controllers/usman/admin/permissions_controller.rb +8 -15
- data/app/controllers/usman/admin/roles_controller.rb +3 -2
- data/app/controllers/usman/admin/user_roles_controller.rb +142 -0
- data/app/controllers/usman/admin/users_controller.rb +3 -1
- data/app/helpers/usman/authentication_helper.rb +18 -7
- data/app/models/feature.rb +16 -29
- data/app/models/permission.rb +3 -8
- data/app/models/role.rb +3 -6
- data/app/models/user.rb +43 -63
- data/app/models/usman/application_record.rb +4 -0
- data/app/views/layouts/kuppayam/_sidebar.html.erb +8 -7
- data/app/views/usman/admin/features/_form.html.erb +5 -2
- data/app/views/usman/admin/features/_index.html.erb +4 -1
- data/app/views/usman/admin/features/index.html.erb +20 -3
- data/app/views/usman/admin/permissions/_show.html.erb +2 -10
- data/app/views/usman/admin/permissions/index.html.erb +20 -3
- data/app/views/usman/admin/roles/_form.html.erb +1 -1
- data/app/views/usman/admin/roles/_index.html.erb +3 -3
- data/app/views/usman/admin/roles/_row.html.erb +2 -2
- data/app/views/usman/admin/roles/_show.html.erb +41 -7
- data/app/views/usman/admin/roles/index.html.erb +22 -3
- data/app/views/usman/admin/user_roles/_form.html.erb +24 -0
- data/app/views/usman/admin/user_roles/_index.html.erb +59 -0
- data/app/views/usman/admin/user_roles/_row.html.erb +30 -0
- data/app/views/usman/admin/user_roles/_show.html.erb +74 -0
- data/app/views/usman/admin/users/_index.html.erb +21 -15
- data/app/views/usman/admin/users/_row.html.erb +3 -3
- data/app/views/usman/admin/users/_show.html.erb +1 -1
- data/app/views/usman/admin/users/index.html.erb +3 -1
- data/app/views/usman/sessions/_form.html.erb +18 -6
- data/config/locales/kuppayam/authentication.en.yml +1 -1
- data/config/routes.rb +3 -1
- data/db/import_data/dummy/roles.csv +9 -0
- data/db/import_data/dummy/users.csv +3 -3
- data/db/import_data/roles.csv +5 -0
- data/lib/tasks/usman/all.rake +34 -10
- data/lib/{tasks/usman → temp}/features.rake +3 -6
- data/lib/{tasks/usman → temp}/permissions.rake +3 -5
- data/lib/temp/roles.rake +24 -0
- data/lib/{tasks/usman → temp}/users.rake +3 -5
- data/lib/usman/engine.rb +0 -2
- data/lib/usman/version.rb +1 -1
- metadata +17 -37
- data/app/views/usman/admin/features/_action_buttons.html.erb +0 -0
- data/app/views/usman/admin/features/temp/create.js.erb +0 -29
- data/app/views/usman/admin/features/temp/destroy.js.erb +0 -16
- data/app/views/usman/admin/features/temp/edit.js.erb +0 -7
- data/app/views/usman/admin/features/temp/index.js.erb +0 -8
- data/app/views/usman/admin/features/temp/new.js.erb +0 -7
- data/app/views/usman/admin/features/temp/row.js.erb +0 -10
- data/app/views/usman/admin/features/temp/show.js.erb +0 -8
- data/app/views/usman/admin/features/temp/update.js.erb +0 -16
- data/app/views/usman/admin/permissions/temp/create.js.erb +0 -29
- data/app/views/usman/admin/permissions/temp/destroy.js.erb +0 -22
- data/app/views/usman/admin/permissions/temp/edit.js.erb +0 -4
- data/app/views/usman/admin/permissions/temp/index.js.erb +0 -14
- data/app/views/usman/admin/permissions/temp/new.js.erb +0 -4
- data/app/views/usman/admin/permissions/temp/row.js.erb +0 -24
- data/app/views/usman/admin/permissions/temp/show.js.erb +0 -13
- data/app/views/usman/admin/permissions/temp/update.js.erb +0 -29
- data/db/import_data/dummy/images/users/guna.neweast.png +0 -0
- data/db/import_data/dummy/images/users/junaid.ramzan.jpg +0 -0
- data/db/import_data/dummy/images/users/kpvarma.png +0 -0
- data/db/import_data/dummy/images/users/stephen.price.png +0 -0
- data/db/import_data/dummy/images/users/vinodh.jpg +0 -0
- data/db/import_data/features.csv +0 -10
- data/db/import_data/images/users/junaid.ramzan.jpg +0 -0
- data/db/import_data/images/users/kpvarma.png +0 -0
- data/db/import_data/images/users/vinodh.jpg +0 -0
- data/db/import_data/permissions.csv +0 -30
- data/lib/usman/extras/import_error_handler.rb +0 -79
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c65c43b24f186560b1f39335dbea222f3ea9b22a
|
|
4
|
+
data.tar.gz: f527e47ba03c22de8fe1bdb6bc3b569c77f3b6f2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4fb1ef097e0a139368176c48695857aae00e8fe8087e3d2b47793cc34848485306d9d41fed93a927d1ff14e937b086a32885b6b13c64c01c394e4401a12899cd
|
|
7
|
+
data.tar.gz: 65cbc70c65a69ac79a26c76c172a53bcb6004a0399d01a4990487c366d7db5369dd64ac4f53b88ef0b95694793bfd2fd22235d63cde824fefeee048924aa1b5c
|
|
@@ -2,29 +2,20 @@ module Usman
|
|
|
2
2
|
module Admin
|
|
3
3
|
class PermissionsController < ResourceController
|
|
4
4
|
|
|
5
|
-
def index
|
|
6
|
-
@heading = "Manage Permissions"
|
|
7
|
-
@description = "Listing all permissions"
|
|
8
|
-
@links = [{name: "Dashboard", link: admin_dashboard_path, icon: 'fa-home'},
|
|
9
|
-
{name: "Manage Permissions", link: admin_permissions_path, icon: 'fa-user', active: true}]
|
|
10
|
-
super
|
|
11
|
-
end
|
|
12
|
-
|
|
13
5
|
def create
|
|
14
|
-
@permission = Permission.where(" user_id = ? AND feature_id = ? ", permitted_params[:user_id], permitted_params[:feature_id]).first || Permission.new
|
|
6
|
+
@permission = @r_object = Permission.where(" user_id = ? AND feature_id = ? ", permitted_params[:user_id], permitted_params[:feature_id]).first || Permission.new
|
|
15
7
|
@permission.assign_attributes(permitted_params)
|
|
16
|
-
save_resource
|
|
17
|
-
|
|
8
|
+
save_resource
|
|
18
9
|
get_collections
|
|
19
10
|
end
|
|
20
11
|
|
|
21
12
|
def update
|
|
22
|
-
@permission = Permission.find_by_id(params[:id])
|
|
13
|
+
@permission = @r_object = Permission.find_by_id(params[:id])
|
|
23
14
|
# The form will not submit can_create 0 if it is not selected
|
|
24
15
|
# hence making it false by default and letting it update by itself.
|
|
25
16
|
@permission.assign_attributes({"can_create": "0", "can_read": "0", "can_update": "0", "can_delete": "0"})
|
|
26
17
|
@permission.assign_attributes(permitted_params)
|
|
27
|
-
save_resource
|
|
18
|
+
save_resource
|
|
28
19
|
get_collections
|
|
29
20
|
end
|
|
30
21
|
|
|
@@ -36,7 +27,7 @@ module Usman
|
|
|
36
27
|
parse_filters
|
|
37
28
|
apply_filters
|
|
38
29
|
|
|
39
|
-
@permissions = @relation.includes(:user, :feature).page(@current_page).per(@per_page)
|
|
30
|
+
@permissions = @r_objects = @relation.includes(:user, :feature).page(@current_page).per(@per_page)
|
|
40
31
|
|
|
41
32
|
return true
|
|
42
33
|
end
|
|
@@ -65,7 +56,9 @@ module Usman
|
|
|
65
56
|
|
|
66
57
|
def resource_controller_configuration
|
|
67
58
|
{
|
|
68
|
-
|
|
59
|
+
page_title: "Permissions",
|
|
60
|
+
js_view_path: "/kuppayam/workflows/parrot",
|
|
61
|
+
view_path: "/usman/admin/permissions"
|
|
69
62
|
}
|
|
70
63
|
end
|
|
71
64
|
|
|
@@ -18,7 +18,7 @@ module Usman
|
|
|
18
18
|
def apply_filters
|
|
19
19
|
@relation = @relation.search(@query) if @query
|
|
20
20
|
|
|
21
|
-
@order_by = "
|
|
21
|
+
@order_by = "name ASC" unless @order_by
|
|
22
22
|
@relation = @relation.order(@order_by)
|
|
23
23
|
end
|
|
24
24
|
|
|
@@ -39,7 +39,8 @@ module Usman
|
|
|
39
39
|
|
|
40
40
|
def resource_controller_configuration
|
|
41
41
|
{
|
|
42
|
-
|
|
42
|
+
page_title: "Roles",
|
|
43
|
+
js_view_path: "/kuppayam/workflows/peacock",
|
|
43
44
|
view_path: "/usman/admin/roles"
|
|
44
45
|
}
|
|
45
46
|
end
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
module Usman
|
|
2
|
+
module Admin
|
|
3
|
+
class UserRolesController < ResourceController
|
|
4
|
+
|
|
5
|
+
before_action :get_role
|
|
6
|
+
|
|
7
|
+
def index
|
|
8
|
+
get_collections
|
|
9
|
+
respond_to do |format|
|
|
10
|
+
format.html {}
|
|
11
|
+
format.js {
|
|
12
|
+
js_view_path = @resource_options && @resource_options[:js_view_path] ? "#{@resource_options[:js_view_path]}/index" : :index
|
|
13
|
+
render js_view_path
|
|
14
|
+
}
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def show
|
|
19
|
+
@user = @r_object = @resource_options[:class].find_by_id(params[:id])
|
|
20
|
+
set_notification(false, I18n.t('status.error'), I18n.t('status.not_found', item: default_item_name.titleize)) unless @r_object
|
|
21
|
+
render_accordingly
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def new
|
|
25
|
+
@user = User.new
|
|
26
|
+
render_accordingly
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def create
|
|
30
|
+
@user = @r_object = User.find_by_id(permitted_params[:id])
|
|
31
|
+
if @user.add_role(@role)
|
|
32
|
+
set_notification(true, I18n.t('status.success'), "Role '#{@role.name}' has been assigned to the user '#{@user.name}'")
|
|
33
|
+
else
|
|
34
|
+
set_notification(false, I18n.t('status.success'), "Failed to assign the Role '#{@role.name}'")
|
|
35
|
+
end
|
|
36
|
+
action_name = params[:action].to_s == "create" ? "new" : "edit"
|
|
37
|
+
render_or_redirect(false, resource_url(@r_object), action_name)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def destroy
|
|
41
|
+
@user = @r_object = User.find_by_id(params[:id])
|
|
42
|
+
if @user
|
|
43
|
+
if @user.remove_role(@role)
|
|
44
|
+
get_collections
|
|
45
|
+
set_flash_message(I18n.t('success.deleted'), :success)
|
|
46
|
+
set_notification(true, I18n.t('status.success'), "Role '#{@role.name}' has been removed for the user '#{@user.name}'")
|
|
47
|
+
@destroyed = true
|
|
48
|
+
else
|
|
49
|
+
message = I18n.t('errors.failed_to_delete', item: default_item_name.titleize)
|
|
50
|
+
set_flash_message(message, :failure)
|
|
51
|
+
set_notification(false, I18n.t('status.success'), "Failed to remove the Role '#{@role.name}'")
|
|
52
|
+
@destroyed = false
|
|
53
|
+
end
|
|
54
|
+
else
|
|
55
|
+
set_notification(false, I18n.t('status.error'), I18n.t('status.not_found', item: default_item_name.titleize))
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
respond_to do |format|
|
|
59
|
+
format.html {}
|
|
60
|
+
format.js {
|
|
61
|
+
js_view_path = @resource_options && @resource_options[:js_view_path] ? "#{@resource_options[:js_view_path]}/destroy" : :destroy
|
|
62
|
+
render js_view_path
|
|
63
|
+
}
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
private
|
|
69
|
+
|
|
70
|
+
def get_role
|
|
71
|
+
@role = Role.find_by_id(params[:role_id])
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def get_collections
|
|
75
|
+
@relation = @role.users.where("")
|
|
76
|
+
|
|
77
|
+
parse_filters
|
|
78
|
+
apply_filters
|
|
79
|
+
|
|
80
|
+
@users = @r_objects = @relation.page(@current_page).per(@per_page)
|
|
81
|
+
|
|
82
|
+
return true
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def apply_filters
|
|
86
|
+
@relation = @relation.search(@query) if @query
|
|
87
|
+
|
|
88
|
+
@order_by = "name ASC" unless @order_by
|
|
89
|
+
@relation = @relation.order(@order_by)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def configure_filter_settings
|
|
93
|
+
@filter_settings = {
|
|
94
|
+
string_filters: [
|
|
95
|
+
{ filter_name: :query }
|
|
96
|
+
],
|
|
97
|
+
boolean_filters: [],
|
|
98
|
+
reference_filters: [],
|
|
99
|
+
variable_filters: [],
|
|
100
|
+
}
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def configure_filter_ui_settings
|
|
104
|
+
@filter_ui_settings = {}
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def resource_url(obj)
|
|
108
|
+
url_for([:admin, @role, obj])
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def resource_controller_configuration
|
|
112
|
+
{
|
|
113
|
+
collection_name: :users,
|
|
114
|
+
item_name: :user,
|
|
115
|
+
class: User,
|
|
116
|
+
show_modal_after_update: false,
|
|
117
|
+
show_modal_after_update: false,
|
|
118
|
+
page_title: "Manage User Roles",
|
|
119
|
+
js_view_path: "/kuppayam/workflows/parrot",
|
|
120
|
+
view_path: "/usman/admin/user_roles"
|
|
121
|
+
}
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def breadcrumbs_configuration
|
|
125
|
+
{
|
|
126
|
+
heading: "Manage User Roles",
|
|
127
|
+
description: "Listing all User Roles",
|
|
128
|
+
links: [{name: "Home", link: admin_dashboard_path, icon: 'fa-home'}]
|
|
129
|
+
}
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def permitted_params
|
|
133
|
+
params.require(:user).permit(:id)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def set_navs
|
|
137
|
+
set_nav("admin/roles/user_roles")
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
@@ -10,7 +10,14 @@ module Usman
|
|
|
10
10
|
|
|
11
11
|
# Returns the default URL to which the system should redirect the user after successful authentication
|
|
12
12
|
def default_redirect_url_after_sign_in
|
|
13
|
-
|
|
13
|
+
main_app.user_landing_url
|
|
14
|
+
# if @current_user.has_role?("Admin")
|
|
15
|
+
# main_app.admin_dashboard_url
|
|
16
|
+
# elsif @current_user.has_role?("Admin")
|
|
17
|
+
# main_app.store_dashboard_url
|
|
18
|
+
# else
|
|
19
|
+
# main_app.admin_dashboard_url
|
|
20
|
+
# end
|
|
14
21
|
end
|
|
15
22
|
|
|
16
23
|
# Returns the default URL to which the system should redirect the user after an unsuccessful attempt to authorise a resource/page
|
|
@@ -22,11 +29,11 @@ module Usman
|
|
|
22
29
|
# This method should also handle the redirection if it has come through a client appliction for authentication
|
|
23
30
|
# In that case, it should persist the params passed by the client application
|
|
24
31
|
def redirect_after_unsuccessful_authentication
|
|
25
|
-
params_hsh = {}
|
|
26
|
-
params_hsh[:client_app] = params[:client_app] if params[:client_app]
|
|
27
|
-
params_hsh[:redirect_back_url] = params[:redirect_back_url] if params[:redirect_back_url]
|
|
28
|
-
params_hsh[:requested_url] = request.original_url if request.get?
|
|
29
|
-
redirect_to add_query_params(default_sign_in_url, params_hsh)
|
|
32
|
+
@params_hsh = {}
|
|
33
|
+
@params_hsh[:client_app] = params[:client_app] if params[:client_app]
|
|
34
|
+
@params_hsh[:redirect_back_url] = params[:redirect_back_url] if params[:redirect_back_url]
|
|
35
|
+
@params_hsh[:requested_url] = request.original_url if request.get?
|
|
36
|
+
redirect_to add_query_params(default_sign_in_url, @params_hsh)
|
|
30
37
|
return
|
|
31
38
|
end
|
|
32
39
|
|
|
@@ -49,6 +56,11 @@ module Usman
|
|
|
49
56
|
redirect_after_unsuccessful_authentication
|
|
50
57
|
}
|
|
51
58
|
format.js {
|
|
59
|
+
@params_hsh = {}
|
|
60
|
+
@params_hsh[:client_app] = params[:client_app] if params[:client_app]
|
|
61
|
+
@params_hsh[:redirect_back_url] = params[:redirect_back_url] if params[:redirect_back_url]
|
|
62
|
+
@params_hsh[:requested_url] = request.original_url if request.get?
|
|
63
|
+
|
|
52
64
|
render(:partial => 'usman/sessions/sign_in.js.erb', :handlers => [:erb], :formats => [:js])
|
|
53
65
|
}
|
|
54
66
|
end
|
|
@@ -118,7 +130,6 @@ module Usman
|
|
|
118
130
|
session[:last_user_id] = current_user.id if current_user
|
|
119
131
|
user.start_session
|
|
120
132
|
session[:id] = user.id
|
|
121
|
-
default_redirect_url_after_sign_in
|
|
122
133
|
redirect_to default_redirect_url_after_sign_in
|
|
123
134
|
end
|
|
124
135
|
|
data/app/models/feature.rb
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
class Feature < Usman::ApplicationRecord
|
|
2
2
|
|
|
3
|
-
require 'import_error_handler.rb'
|
|
4
|
-
extend Usman::ImportErrorHandler
|
|
5
|
-
|
|
6
3
|
# Constants
|
|
7
4
|
UNPUBLISHED = "unpublished"
|
|
8
5
|
PUBLISHED = "published"
|
|
@@ -47,9 +44,7 @@ class Feature < Usman::ApplicationRecord
|
|
|
47
44
|
scope :published, -> { where(status: PUBLISHED) }
|
|
48
45
|
scope :disabled, -> { where(status: DISABLED) }
|
|
49
46
|
|
|
50
|
-
def self.save_row_data(row
|
|
51
|
-
|
|
52
|
-
image_base_path = base_path + "images/"
|
|
47
|
+
def self.save_row_data(row)
|
|
53
48
|
|
|
54
49
|
row.headers.each{ |cell| row[cell] = row[cell].to_s.strip }
|
|
55
50
|
|
|
@@ -60,33 +55,13 @@ class Feature < Usman::ApplicationRecord
|
|
|
60
55
|
feature.status = Feature::UNPUBLISHED
|
|
61
56
|
|
|
62
57
|
# Initializing error hash for displaying all errors altogether
|
|
63
|
-
error_object =
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
begin
|
|
67
|
-
image_path = image_base_path + "features/#{feature.name.parameterize}.png"
|
|
68
|
-
image_path = image_base_path + "features/#{feature.name.parameterize}}.jpg" unless File.exists?(image_path)
|
|
69
|
-
if File.exists?(image_path)
|
|
70
|
-
feature.build_feature_image
|
|
71
|
-
feature.feature_image.image = File.open(image_path)
|
|
72
|
-
else
|
|
73
|
-
summary = "Feature Image not found for feature: #{feature.name}"
|
|
74
|
-
details = "#{image_path}/png doesn't exists"
|
|
75
|
-
error_object.warnings << { summary: summary, details: details }
|
|
76
|
-
end
|
|
77
|
-
rescue => e
|
|
78
|
-
summary = "Error during processing: #{$!}"
|
|
79
|
-
details = "Feature: #{feature.name}, Image Path: #{image_path}"
|
|
80
|
-
stack_trace = "Backtrace:\n\t#{e.backtrace.join("\n\t")}"
|
|
81
|
-
error_object.errors << { summary: summary, details: details, stack_trace: stack_trace }
|
|
82
|
-
end if feature.feature_image.blank?
|
|
83
|
-
|
|
84
|
-
if feature.valid? && (feature.feature_image.blank? || feature.feature_image.valid?)
|
|
58
|
+
error_object = Kuppayam::Importer::ErrorHash.new
|
|
59
|
+
|
|
60
|
+
if feature.valid?
|
|
85
61
|
feature.save!
|
|
86
62
|
else
|
|
87
63
|
summary = "Error while saving feature: #{feature.name}"
|
|
88
64
|
details = "Error! #{feature.errors.full_messages.to_sentence}"
|
|
89
|
-
details << ", #{feature.feature_image.errors.full_messages.to_sentence}" if feature.feature_image
|
|
90
65
|
error_object.errors << { summary: summary, details: details }
|
|
91
66
|
end
|
|
92
67
|
return error_object
|
|
@@ -154,5 +129,17 @@ class Feature < Usman::ApplicationRecord
|
|
|
154
129
|
def can_be_destroyed?
|
|
155
130
|
return true
|
|
156
131
|
end
|
|
132
|
+
|
|
133
|
+
def can_be_published?
|
|
134
|
+
unpublished? or disabled?
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def can_be_unpublished?
|
|
138
|
+
published? or disabled?
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def can_be_removed?
|
|
142
|
+
published? or unpublished? or disabled?
|
|
143
|
+
end
|
|
157
144
|
|
|
158
145
|
end
|
data/app/models/permission.rb
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
class Permission < Usman::ApplicationRecord
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
extend Usman::ImportErrorHandler
|
|
5
|
-
|
|
6
|
-
# Associations
|
|
3
|
+
# Associations
|
|
7
4
|
belongs_to :user
|
|
8
5
|
belongs_to :feature
|
|
9
6
|
|
|
@@ -30,16 +27,14 @@ class Permission < Usman::ApplicationRecord
|
|
|
30
27
|
LOWER(f.name) LIKE LOWER('%#{query}%')")}
|
|
31
28
|
|
|
32
29
|
|
|
33
|
-
def self.save_row_data(row
|
|
34
|
-
|
|
35
|
-
image_base_path = base_path + "images/"
|
|
30
|
+
def self.save_row_data(row)
|
|
36
31
|
|
|
37
32
|
row.headers.each{ |cell| row[cell] = row[cell].to_s.strip }
|
|
38
33
|
|
|
39
34
|
return if row[:user].blank? || row[:feature].blank?
|
|
40
35
|
|
|
41
36
|
# Initializing error hash for displaying all errors altogether
|
|
42
|
-
error_object =
|
|
37
|
+
error_object = Kuppayam::Importer::ErrorHash.new
|
|
43
38
|
|
|
44
39
|
user = User.find_by_username(row[:user])
|
|
45
40
|
unless user
|
data/app/models/role.rb
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
class Role < Usman::ApplicationRecord
|
|
2
2
|
|
|
3
|
-
require 'import_error_handler.rb'
|
|
4
|
-
extend Usman::ImportErrorHandler
|
|
5
|
-
|
|
6
3
|
# Associations
|
|
7
4
|
has_and_belongs_to_many :users
|
|
8
5
|
|
|
@@ -18,10 +15,10 @@ class Role < Usman::ApplicationRecord
|
|
|
18
15
|
# == Examples
|
|
19
16
|
# >>> role.search(query)
|
|
20
17
|
# => ActiveRecord::Relation object
|
|
21
|
-
scope :search, lambda {|query| where("LOWER(name) LIKE LOWER('%#{query}%')")
|
|
18
|
+
scope :search, lambda {|query| where("LOWER(roles.name) LIKE LOWER('%#{query}%')")
|
|
22
19
|
}
|
|
23
20
|
|
|
24
|
-
def self.save_row_data(row
|
|
21
|
+
def self.save_row_data(row)
|
|
25
22
|
|
|
26
23
|
row.headers.each{ |cell| row[cell] = row[cell].to_s.strip }
|
|
27
24
|
|
|
@@ -31,7 +28,7 @@ class Role < Usman::ApplicationRecord
|
|
|
31
28
|
role.name = row[:name]
|
|
32
29
|
|
|
33
30
|
# Initializing error hash for displaying all errors altogether
|
|
34
|
-
error_object =
|
|
31
|
+
error_object = Kuppayam::Importer::ErrorHash.new
|
|
35
32
|
|
|
36
33
|
if role.valid?
|
|
37
34
|
role.save!
|
data/app/models/user.rb
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
class User < Usman::ApplicationRecord
|
|
2
2
|
|
|
3
|
-
require 'import_error_handler.rb'
|
|
4
|
-
extend Usman::ImportErrorHandler
|
|
5
|
-
extend KuppayamValidators
|
|
6
|
-
|
|
7
3
|
# including Password Methods
|
|
8
4
|
has_secure_password
|
|
9
5
|
|
|
@@ -26,7 +22,7 @@ class User < Usman::ApplicationRecord
|
|
|
26
22
|
|
|
27
23
|
EXCLUDED_JSON_ATTRIBUTES = [:confirmation_token, :password_digest, :reset_password_token, :unlock_token, :status, :reset_password_sent_at, :remember_created_at, :sign_in_count, :current_sign_in_at, :last_sign_in_at, :current_sign_in_ip, :last_sign_in_ip, :confirmed_at, :confirmation_sent_at, :unconfirmed_email, :failed_attempts, :locked_at, :created_at, :updated_at]
|
|
28
24
|
DEFAULT_PASSWORD = "Password@1"
|
|
29
|
-
SESSION_TIME_OUT =
|
|
25
|
+
SESSION_TIME_OUT = 120.minutes
|
|
30
26
|
|
|
31
27
|
# Validations
|
|
32
28
|
validates :name, presence: true
|
|
@@ -43,7 +39,7 @@ class User < Usman::ApplicationRecord
|
|
|
43
39
|
has_one :profile_picture, :as => :imageable, :dependent => :destroy, :class_name => "Image::ProfilePicture"
|
|
44
40
|
has_many :permissions
|
|
45
41
|
has_many :features, through: :permissions
|
|
46
|
-
has_and_belongs_to_many :
|
|
42
|
+
has_and_belongs_to_many :roles
|
|
47
43
|
|
|
48
44
|
|
|
49
45
|
# ------------------
|
|
@@ -59,10 +55,10 @@ class User < Usman::ApplicationRecord
|
|
|
59
55
|
# == Examples
|
|
60
56
|
# >>> user.search(query)
|
|
61
57
|
# => ActiveRecord::Relation object
|
|
62
|
-
scope :search, lambda {|query| where("LOWER(name) LIKE LOWER('%#{query}%') OR\
|
|
63
|
-
LOWER(username) LIKE LOWER('%#{query}%') OR\
|
|
64
|
-
LOWER(email) LIKE LOWER('%#{query}%') OR\
|
|
65
|
-
LOWER(designation) LIKE LOWER('%#{query}%')")
|
|
58
|
+
scope :search, lambda {|query| where("LOWER(users.name) LIKE LOWER('%#{query}%') OR\
|
|
59
|
+
LOWER(users.username) LIKE LOWER('%#{query}%') OR\
|
|
60
|
+
LOWER(users.email) LIKE LOWER('%#{query}%') OR\
|
|
61
|
+
LOWER(users.designation) LIKE LOWER('%#{query}%')")
|
|
66
62
|
}
|
|
67
63
|
|
|
68
64
|
scope :status, lambda { |status| where("LOWER(status)='#{status}'") }
|
|
@@ -70,10 +66,11 @@ class User < Usman::ApplicationRecord
|
|
|
70
66
|
scope :pending, -> { where(status: PENDING) }
|
|
71
67
|
scope :approved, -> { where(status: APPROVED) }
|
|
72
68
|
scope :suspended, -> { where(status: SUSPENDED) }
|
|
69
|
+
|
|
70
|
+
scope :super_admins, -> { where(super_admin: TRUE) }
|
|
71
|
+
scope :normal_users, -> { where(super_admin: FALSE) }
|
|
73
72
|
|
|
74
|
-
def self.save_row_data(row
|
|
75
|
-
|
|
76
|
-
image_base_path = base_path + "images/"
|
|
73
|
+
def self.save_row_data(row)
|
|
77
74
|
|
|
78
75
|
row.headers.each{ |cell| row[cell] = row[cell].to_s.strip }
|
|
79
76
|
|
|
@@ -92,7 +89,7 @@ class User < Usman::ApplicationRecord
|
|
|
92
89
|
user.assign_default_password
|
|
93
90
|
|
|
94
91
|
# Initializing error hash for displaying all errors altogether
|
|
95
|
-
error_object =
|
|
92
|
+
error_object = Kuppayam::Importer::ErrorHash.new
|
|
96
93
|
|
|
97
94
|
if user.valid?
|
|
98
95
|
user.save!
|
|
@@ -102,33 +99,6 @@ class User < Usman::ApplicationRecord
|
|
|
102
99
|
error_object.errors << { summary: summary, details: details }
|
|
103
100
|
end
|
|
104
101
|
|
|
105
|
-
## Adding a profile picture
|
|
106
|
-
begin
|
|
107
|
-
image_path = image_base_path + "users/#{user.username}.png"
|
|
108
|
-
image_path = image_base_path + "users/#{user.username}.jpg" unless File.exists?(image_path)
|
|
109
|
-
if File.exists?(image_path)
|
|
110
|
-
user.build_profile_picture
|
|
111
|
-
user.profile_picture.image = File.open(image_path)
|
|
112
|
-
if user.profile_picture.valid?
|
|
113
|
-
user.profile_picture.save
|
|
114
|
-
else
|
|
115
|
-
summary = "Error while saving user: #{user.name}"
|
|
116
|
-
details = "Error! #{user.errors.full_messages.to_sentence}"
|
|
117
|
-
details << ", #{user.profile_picture.errors.full_messages.to_sentence}" if user.profile_picture
|
|
118
|
-
error_object.errors << { summary: summary, details: details }
|
|
119
|
-
end
|
|
120
|
-
else
|
|
121
|
-
summary = "Profile Picture not found for user: #{user.name}"
|
|
122
|
-
details = "#{image_path}/png doesn't exists"
|
|
123
|
-
error_object.warnings << { summary: summary, details: details }
|
|
124
|
-
end
|
|
125
|
-
rescue => e
|
|
126
|
-
summary = "Error during processing: #{$!}"
|
|
127
|
-
details = "User: #{user.name}, Image Path: #{image_path}"
|
|
128
|
-
stack_trace = "Backtrace:\n\t#{e.backtrace.join("\n\t")}"
|
|
129
|
-
error_object.errors << { summary: summary, details: details, stack_trace: stack_trace }
|
|
130
|
-
end if user.profile_picture.blank?
|
|
131
|
-
|
|
132
102
|
return error_object
|
|
133
103
|
end
|
|
134
104
|
|
|
@@ -223,6 +193,10 @@ class User < Usman::ApplicationRecord
|
|
|
223
193
|
self.update_attribute(:token_created_at, Time.now)
|
|
224
194
|
end
|
|
225
195
|
|
|
196
|
+
def expire_token!
|
|
197
|
+
self.update_attribute(:token_created_at, (Time.now - (SESSION_TIME_OUT + 1.minute)))
|
|
198
|
+
end
|
|
199
|
+
|
|
226
200
|
def token_about_to_expire?
|
|
227
201
|
return self.token_created_at.nil? || (Time.now > self.token_created_at + (SESSION_TIME_OUT - 1.minute))
|
|
228
202
|
end
|
|
@@ -301,13 +275,40 @@ class User < Usman::ApplicationRecord
|
|
|
301
275
|
end
|
|
302
276
|
|
|
303
277
|
def can_be_deleted?
|
|
304
|
-
|
|
278
|
+
suspended?
|
|
305
279
|
end
|
|
306
280
|
|
|
307
281
|
def can_be_edited?
|
|
308
282
|
!suspended?
|
|
309
283
|
end
|
|
310
284
|
|
|
285
|
+
def add_role(role)
|
|
286
|
+
return false unless self.approved?
|
|
287
|
+
role = Role.find_by_name(role) if role.is_a?(String)
|
|
288
|
+
if role
|
|
289
|
+
self.roles << role unless self.has_role?(role)
|
|
290
|
+
return true
|
|
291
|
+
else
|
|
292
|
+
return false
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
def remove_role(role)
|
|
297
|
+
role = Role.find_by_name(role) if role.is_a?(String)
|
|
298
|
+
self.roles.delete(role) if role
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
def has_role?(role)
|
|
302
|
+
role = Role.find_by_name(role) if role.is_a?(String)
|
|
303
|
+
if role && role.persisted?
|
|
304
|
+
return true if self.super_admin
|
|
305
|
+
self.roles.exists?(:id => [role.id])
|
|
306
|
+
else
|
|
307
|
+
return false
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
end
|
|
311
|
+
|
|
311
312
|
private
|
|
312
313
|
|
|
313
314
|
def should_validate_password?
|
|
@@ -332,25 +333,4 @@ class User < Usman::ApplicationRecord
|
|
|
332
333
|
return feature
|
|
333
334
|
end
|
|
334
335
|
|
|
335
|
-
def get_role(role_name)
|
|
336
|
-
self.roles.find_by_id(role_name) || self.roles.find_by_name(role_name)
|
|
337
|
-
end
|
|
338
|
-
|
|
339
|
-
def add_role(role_name)
|
|
340
|
-
role = self.get_role(role_name)
|
|
341
|
-
self.roles << role if role && role.persists?
|
|
342
|
-
end
|
|
343
|
-
|
|
344
|
-
def remove_role(role_name)
|
|
345
|
-
role = self.get_role(role_name)
|
|
346
|
-
if role
|
|
347
|
-
self.roles.delete(role)
|
|
348
|
-
end
|
|
349
|
-
end
|
|
350
|
-
|
|
351
|
-
def has_role?(role_name)
|
|
352
|
-
role = self.get_role(role_name)
|
|
353
|
-
role && role.persists?
|
|
354
|
-
end
|
|
355
|
-
|
|
356
336
|
end
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
|
|
38
38
|
<!-- class "auto-inherit-active-class" will automatically add "active" class for parent elements who are marked already with class "active" -->
|
|
39
39
|
|
|
40
|
+
<!-- Admin Dashboard -->
|
|
40
41
|
<li class="<%= nav_active?('admin/dashboard') ? 'active' : '' %>">
|
|
41
42
|
<%= link_to raw("<i class=\"linecons-desktop\"></i> <span class='title'>Dashboard</span>"), usman.admin_dashboard_url %>
|
|
42
43
|
</li>
|
|
@@ -52,29 +53,29 @@
|
|
|
52
53
|
<li class="<%= nav_class("admin/users") %>">
|
|
53
54
|
<%= link_to raw("<i class=\"linecons-user\"></i> <span class='title'>Manage Users</span>"), usman.admin_users_url %>
|
|
54
55
|
</li>
|
|
55
|
-
|
|
56
|
-
<li class="<%= nav_class("admin/users") %>">
|
|
57
|
-
<%= link_to raw("<i class=\"linecons-lock\"></i> <span class='title'>Manage Permissions</span>"), usman.admin_permissions_url %>
|
|
58
|
-
</li>
|
|
59
56
|
</ul>
|
|
60
|
-
|
|
61
57
|
</li>
|
|
62
58
|
|
|
59
|
+
<% if @current_user.super_admin? %>
|
|
63
60
|
<li class="">
|
|
64
61
|
<a href="/xenon/xenon-files/html/dashboard-1.html">
|
|
65
62
|
<i class="linecons-database"></i>
|
|
66
63
|
<span class="title">Master Data</span>
|
|
67
64
|
</a>
|
|
65
|
+
|
|
68
66
|
<ul>
|
|
69
67
|
<li class="">
|
|
70
68
|
<%= link_to raw("<i class=\"linecons-diamond\"></i> <span class='title'>Manage Features</span>"), usman.admin_features_url %>
|
|
71
69
|
</li>
|
|
72
70
|
|
|
73
|
-
<li class="">
|
|
74
|
-
<%= link_to raw("<i class=\"linecons-
|
|
71
|
+
<li class="<%= nav_class("admin/users") %>">
|
|
72
|
+
<%= link_to raw("<i class=\"linecons-lock\"></i> <span class='title'>Manage Permissions</span>"), usman.admin_permissions_url %>
|
|
75
73
|
</li>
|
|
76
74
|
</ul>
|
|
75
|
+
|
|
77
76
|
</li>
|
|
77
|
+
<% end %>
|
|
78
|
+
|
|
78
79
|
</ul>
|
|
79
80
|
|
|
80
81
|
</div>
|