usman 0.1.0 → 0.1.1
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/README.md +51 -10
- data/app/controllers/usman/admin/dashboard_controller.rb +9 -1
- data/app/controllers/usman/admin/features_controller.rb +16 -22
- data/app/controllers/usman/admin/permissions_controller.rb +15 -0
- data/app/controllers/usman/admin/resource_controller.rb +4 -0
- data/app/controllers/usman/admin/roles_controller.rb +66 -0
- data/app/controllers/usman/admin/users_controller.rb +44 -31
- data/app/controllers/usman/sessions_controller.rb +14 -3
- data/app/helpers/usman/authentication_helper.rb +23 -17
- data/app/models/feature.rb +50 -4
- data/app/models/permission.rb +49 -1
- data/app/models/role.rb +62 -0
- data/app/models/user.rb +112 -3
- data/app/models/usman/application_record.rb +2 -2
- data/app/views/layouts/kuppayam/_sidebar.html.erb +8 -4
- data/app/views/usman/admin/dashboard/index.html.erb +1 -1
- data/app/views/usman/admin/features/_action_buttons.html.erb +0 -11
- data/app/views/usman/admin/features/_index.html.erb +3 -3
- data/app/views/usman/admin/features/_row.html.erb +3 -3
- data/app/views/usman/admin/features/_show.html.erb +5 -1
- data/app/views/usman/admin/features/index.html.erb +8 -1
- data/app/views/usman/admin/features/temp/create.js.erb +29 -0
- data/app/views/usman/admin/features/{index.js.erb → temp/index.js.erb} +1 -1
- data/app/views/usman/admin/permissions/_action_buttons.html.erb +0 -11
- data/app/views/usman/admin/permissions/index.html.erb +8 -1
- data/app/views/usman/admin/permissions/temp/create.js.erb +29 -0
- data/app/views/usman/admin/permissions/temp/destroy.js.erb +22 -0
- data/app/views/usman/admin/permissions/temp/edit.js.erb +4 -0
- data/app/views/usman/admin/permissions/{index.js.erb → temp/index.js.erb} +9 -3
- data/app/views/usman/admin/permissions/temp/new.js.erb +4 -0
- data/app/views/usman/admin/permissions/temp/row.js.erb +24 -0
- data/app/views/usman/admin/permissions/temp/show.js.erb +13 -0
- data/app/views/usman/admin/permissions/temp/update.js.erb +29 -0
- data/app/views/usman/admin/roles/_form.html.erb +23 -0
- data/app/views/usman/admin/roles/_index.html.erb +48 -0
- data/app/views/usman/admin/roles/_row.html.erb +24 -0
- data/app/views/usman/admin/roles/_show.html.erb +72 -0
- data/app/views/usman/admin/roles/index.html.erb +32 -0
- data/app/views/usman/admin/users/_form.html.erb +5 -2
- data/app/views/usman/admin/users/_index.html.erb +22 -41
- data/app/views/usman/admin/users/_row.html.erb +21 -41
- data/app/views/usman/admin/users/_show.html.erb +198 -131
- data/app/views/usman/admin/users/index.html.erb +25 -1
- data/app/views/usman/sessions/_sign_in.js.erb +2 -2
- data/config/locales/kuppayam/authentication.ar.yml +25 -0
- data/config/locales/kuppayam/authentication.en.yml +25 -0
- data/config/routes.rb +4 -9
- data/db/import_data/dummy/features.csv +10 -0
- 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/dummy/permissions.csv +60 -0
- data/db/import_data/dummy/users.csv +7 -0
- data/db/import_data/features.csv +10 -0
- 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 +30 -0
- data/db/import_data/users.csv +4 -0
- data/db/migrate/20170000000102_create_roles.rb +18 -0
- data/lib/tasks/usman/all.rake +49 -0
- data/lib/tasks/usman/features.rake +26 -0
- data/lib/tasks/usman/permissions.rake +26 -0
- data/lib/tasks/usman/users.rake +26 -0
- data/lib/usman/engine.rb +12 -1
- data/lib/usman/extras/import_error_handler.rb +79 -0
- data/lib/usman/version.rb +1 -1
- metadata +65 -55
- data/app/models/image/base.rb +0 -30
- data/app/views/usman/admin/features/create.js.erb +0 -16
- data/app/views/usman/admin/permissions/create.js.erb +0 -17
- data/app/views/usman/admin/permissions/destroy.js.erb +0 -16
- data/app/views/usman/admin/permissions/edit.js.erb +0 -7
- data/app/views/usman/admin/permissions/new.js.erb +0 -7
- data/app/views/usman/admin/permissions/row.js.erb +0 -10
- data/app/views/usman/admin/permissions/show.js.erb +0 -8
- data/app/views/usman/admin/permissions/update.js.erb +0 -16
- data/app/views/usman/admin/users/_action_buttons.html.erb +0 -11
- data/app/views/usman/admin/users/create.js.erb +0 -16
- data/app/views/usman/admin/users/destroy.js.erb +0 -16
- data/app/views/usman/admin/users/edit.js.erb +0 -7
- data/app/views/usman/admin/users/index.js.erb +0 -8
- data/app/views/usman/admin/users/new.js.erb +0 -7
- data/app/views/usman/admin/users/row.js.erb +0 -10
- data/app/views/usman/admin/users/show.js.erb +0 -8
- data/app/views/usman/admin/users/update.js.erb +0 -16
- data/config/locales/usman.en.yml +0 -61
- data/db/migrate/20131108102728_create_images.rb +0 -12
- data/lib/tasks/usman_tasks.rake +0 -4
- /data/app/views/usman/admin/features/{destroy.js.erb → temp/destroy.js.erb} +0 -0
- /data/app/views/usman/admin/features/{edit.js.erb → temp/edit.js.erb} +0 -0
- /data/app/views/usman/admin/features/{new.js.erb → temp/new.js.erb} +0 -0
- /data/app/views/usman/admin/features/{row.js.erb → temp/row.js.erb} +0 -0
- /data/app/views/usman/admin/features/{show.js.erb → temp/show.js.erb} +0 -0
- /data/app/views/usman/admin/features/{update.js.erb → temp/update.js.erb} +0 -0
- /data/db/migrate/{20140402113213_create_users.rb → 20170000000100_create_users.rb} +0 -0
- /data/db/migrate/{20140402113214_create_features.rb → 20170000000101_create_features.rb} +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 186410d08ecdc9176c36357015749759ec165feb
|
|
4
|
+
data.tar.gz: 7bc5124cf79f1e4eef9bb961fd07506c37e0c75d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d3f4714ec4f68625769e502cafe8b47b04e42fd301d41dd78eb07ebbc246ee38a9d254748d432b8cc1f45bf63d7e363c5d24f0ab9a78782a3f3762f5c4bb9822
|
|
7
|
+
data.tar.gz: c4e5181bc21ed383ca9ebdf0ab6b5fb57e190e0d7b7373313ec6b5f5dbb3c289956b85e76977656456f55bb6e3da1a7c8e1662dfaf817542e1cb63489a6e3e2c
|
data/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Usman
|
|
2
|
-
|
|
2
|
+
Simple User & Feature Permission Management
|
|
3
3
|
|
|
4
4
|
## Usage
|
|
5
|
-
|
|
5
|
+
Usman is a mountable plugin and it requires another full pluggin named kuppayam to run. Kuppayam offers usman the UI skin with basic modules for running like Polymorphic Image and Document Models etc.
|
|
6
6
|
|
|
7
7
|
## Installation
|
|
8
8
|
Add this line to your application's Gemfile:
|
|
@@ -21,18 +21,59 @@ Or install it yourself as:
|
|
|
21
21
|
$ gem install usman
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
Contribution directions go here.
|
|
24
|
+
# Installation Instructions
|
|
26
25
|
|
|
27
|
-
##
|
|
28
|
-
|
|
26
|
+
## Copy the migrations
|
|
27
|
+
|
|
28
|
+
Copy the migrations from the engines you are using
|
|
29
|
+
Run the below command
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
$ bundle exec rake railties:install:migrations
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
This will copy migrations from kuppayam and usman engines
|
|
36
|
+
which will have migrations to create images, documents, users, features and permissions respectively.
|
|
37
|
+
|
|
38
|
+
## Create Dummy Data
|
|
39
|
+
|
|
40
|
+
run rake task for loading dummy data for users and features to start with.
|
|
41
|
+
|
|
42
|
+
## Mount the engine
|
|
43
|
+
|
|
44
|
+
Mount usman engine in your application routes.rb
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
mount Usman::Engine => "/"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
open browser and go to /sign_in url
|
|
29
51
|
|
|
30
|
-
# Installation Instructions
|
|
31
52
|
|
|
32
|
-
# in main application.rb
|
|
33
53
|
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
$ bundle exec rake usman:import:dummy:all verbose=false
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
## Specify the railties order if required
|
|
62
|
+
|
|
63
|
+
in main application.rb
|
|
64
|
+
|
|
65
|
+
```
|
|
34
66
|
config.autoload_paths << "app/services"
|
|
35
67
|
config.railties_order = [:main_app, Usman::Engine, Kuppayam::Engine, :all]
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
## Contributing
|
|
72
|
+
|
|
73
|
+
Visit - https://github.com/right-solutions/usman
|
|
74
|
+
Feel free to submit a patch
|
|
75
|
+
|
|
76
|
+
## License
|
|
77
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
|
78
|
+
|
|
36
79
|
|
|
37
|
-
# add config/initializers/uptime.rb
|
|
38
|
-
Dummy::BOOTED_AT = Time.now
|
|
@@ -2,12 +2,20 @@ module Usman
|
|
|
2
2
|
module Admin
|
|
3
3
|
class DashboardController < Usman::Admin::BaseController
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
# GET /dashboard
|
|
6
6
|
def index
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
private
|
|
10
10
|
|
|
11
|
+
def breadcrumbs_configuration
|
|
12
|
+
{
|
|
13
|
+
heading: "Usman Dashboard",
|
|
14
|
+
description: "A Quick view of users and roles",
|
|
15
|
+
links: [{name: "Dashboard", link: admin_dashboard_path, icon: 'fa-dashboard'}]
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
|
|
11
19
|
def set_navs
|
|
12
20
|
set_nav("admin/dashboard")
|
|
13
21
|
end
|
|
@@ -2,27 +2,6 @@ module Usman
|
|
|
2
2
|
module Admin
|
|
3
3
|
class FeaturesController < ResourceController
|
|
4
4
|
|
|
5
|
-
def index
|
|
6
|
-
@heading = "Manage Features"
|
|
7
|
-
@description = "Listing all features"
|
|
8
|
-
@links = [{name: "Dashboard", link: admin_dashboard_path, icon: 'fa-home'},
|
|
9
|
-
{name: "Manage Features", link: admin_features_path, icon: 'fa-user', active: true}]
|
|
10
|
-
super
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def create
|
|
14
|
-
@feature = Feature.new
|
|
15
|
-
@feature.assign_attributes(permitted_params)
|
|
16
|
-
save_resource(@feature)
|
|
17
|
-
get_collections
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def update_status
|
|
21
|
-
@feature = Feature.find(params[:id])
|
|
22
|
-
@feature.update_attribute(:status, params[:status])
|
|
23
|
-
render :row
|
|
24
|
-
end
|
|
25
|
-
|
|
26
5
|
private
|
|
27
6
|
|
|
28
7
|
def get_collections
|
|
@@ -31,7 +10,7 @@ module Usman
|
|
|
31
10
|
parse_filters
|
|
32
11
|
apply_filters
|
|
33
12
|
|
|
34
|
-
@features = @relation.includes(:feature_image).page(@current_page).per(@per_page)
|
|
13
|
+
@features = @r_objects = @relation.includes(:feature_image).page(@current_page).per(@per_page)
|
|
35
14
|
|
|
36
15
|
return true
|
|
37
16
|
end
|
|
@@ -73,6 +52,21 @@ module Usman
|
|
|
73
52
|
}
|
|
74
53
|
end
|
|
75
54
|
|
|
55
|
+
def resource_controller_configuration
|
|
56
|
+
{
|
|
57
|
+
view_path: "/usman/admin/features"
|
|
58
|
+
}
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def breadcrumbs_configuration
|
|
62
|
+
{
|
|
63
|
+
heading: "Manage Features",
|
|
64
|
+
description: "Listing all Features",
|
|
65
|
+
links: [{name: "Home", link: admin_dashboard_path, icon: 'fa-home'},
|
|
66
|
+
{name: "Manage Features", link: admin_permissions_path, icon: 'fa-calendar', active: true}]
|
|
67
|
+
}
|
|
68
|
+
end
|
|
69
|
+
|
|
76
70
|
def permitted_params
|
|
77
71
|
params.require(:feature).permit(:name)
|
|
78
72
|
end
|
|
@@ -63,6 +63,21 @@ module Usman
|
|
|
63
63
|
@filter_ui_settings = {}
|
|
64
64
|
end
|
|
65
65
|
|
|
66
|
+
def resource_controller_configuration
|
|
67
|
+
{
|
|
68
|
+
view_path: "/demo/permissions"
|
|
69
|
+
}
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def breadcrumbs_configuration
|
|
73
|
+
{
|
|
74
|
+
heading: "Manage Permissions",
|
|
75
|
+
description: "Listing all Permissions",
|
|
76
|
+
links: [{name: "Home", link: admin_dashboard_path, icon: 'fa-home'},
|
|
77
|
+
{name: "Manage Permissions", link: admin_permissions_path, icon: 'fa-calendar', active: true}]
|
|
78
|
+
}
|
|
79
|
+
end
|
|
80
|
+
|
|
66
81
|
def permitted_params
|
|
67
82
|
params.require(:permission).permit(:user_id, :feature_id, :can_create, :can_read, :can_update, :can_delete)
|
|
68
83
|
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
module Usman
|
|
2
|
+
module Admin
|
|
3
|
+
class RolesController < ResourceController
|
|
4
|
+
|
|
5
|
+
private
|
|
6
|
+
|
|
7
|
+
def get_collections
|
|
8
|
+
@relation = Role.where("")
|
|
9
|
+
|
|
10
|
+
parse_filters
|
|
11
|
+
apply_filters
|
|
12
|
+
|
|
13
|
+
@roles = @r_objects = @relation.page(@current_page).per(@per_page)
|
|
14
|
+
|
|
15
|
+
return true
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def apply_filters
|
|
19
|
+
@relation = @relation.search(@query) if @query
|
|
20
|
+
|
|
21
|
+
@order_by = "created_at desc" unless @order_by
|
|
22
|
+
@relation = @relation.order(@order_by)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def configure_filter_settings
|
|
26
|
+
@filter_settings = {
|
|
27
|
+
string_filters: [
|
|
28
|
+
{ filter_name: :query }
|
|
29
|
+
],
|
|
30
|
+
boolean_filters: [],
|
|
31
|
+
reference_filters: [],
|
|
32
|
+
variable_filters: [],
|
|
33
|
+
}
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def configure_filter_ui_settings
|
|
37
|
+
@filter_ui_settings = {}
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def resource_controller_configuration
|
|
41
|
+
{
|
|
42
|
+
js_view_path: "/kuppayam/workflows/parrot",
|
|
43
|
+
view_path: "/usman/admin/roles"
|
|
44
|
+
}
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def breadcrumbs_configuration
|
|
48
|
+
{
|
|
49
|
+
heading: "Manage Roles",
|
|
50
|
+
description: "Listing all Roles",
|
|
51
|
+
links: [{name: "Home", link: admin_dashboard_path, icon: 'fa-home'},
|
|
52
|
+
{name: "Manage Roles", link: admin_roles_path, icon: 'fa-calendar', active: true}]
|
|
53
|
+
}
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def permitted_params
|
|
57
|
+
params.require(:role).permit(:name)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def set_navs
|
|
61
|
+
set_nav("admin/roles")
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -2,42 +2,40 @@ module Usman
|
|
|
2
2
|
module Admin
|
|
3
3
|
class UsersController < ResourceController
|
|
4
4
|
|
|
5
|
-
def index
|
|
6
|
-
@heading = "Manage Users"
|
|
7
|
-
@description = "Listing all users"
|
|
8
|
-
@links = [{name: "Dashboard", link: admin_dashboard_path, icon: 'fa-home'},
|
|
9
|
-
{name: "Manage Users", link: admin_users_path, icon: 'fa-user', active: true}]
|
|
10
|
-
super
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def create
|
|
14
|
-
@user = User.new
|
|
15
|
-
@user.assign_attributes(permitted_params)
|
|
16
|
-
#@user.assign_default_password
|
|
17
|
-
save_resource(@user)
|
|
18
|
-
get_collections
|
|
19
|
-
end
|
|
20
|
-
|
|
21
5
|
def make_super_admin
|
|
22
|
-
@user = User.find(params[:id])
|
|
23
|
-
@user
|
|
24
|
-
|
|
6
|
+
@user = @r_object = User.find(params[:id])
|
|
7
|
+
if @user
|
|
8
|
+
@user.super_admin = true
|
|
9
|
+
if @user.valid?
|
|
10
|
+
@user.save
|
|
11
|
+
set_notification(true, I18n.t('status.success'), I18n.t('state.changed', item: default_item_name.titleize, new_state: @user.status))
|
|
12
|
+
else
|
|
13
|
+
set_notification(false, I18n.t('status.error'), I18n.translate("error"), @user.errors.full_messages.join("<br>"))
|
|
14
|
+
end
|
|
15
|
+
else
|
|
16
|
+
set_notification(false, I18n.t('status.not_found'), I18n.t('status.not_found', item: default_item_name.titleize))
|
|
17
|
+
end
|
|
18
|
+
render_row
|
|
25
19
|
end
|
|
26
20
|
|
|
27
21
|
def remove_super_admin
|
|
28
|
-
@user = User.find(params[:id])
|
|
29
|
-
@user
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
22
|
+
@user = @r_object = User.find(params[:id])
|
|
23
|
+
if @user
|
|
24
|
+
@user.super_admin = false
|
|
25
|
+
if @user.valid?
|
|
26
|
+
@user.save
|
|
27
|
+
set_notification(true, I18n.t('status.success'), I18n.t('state.changed', item: default_item_name.titleize, new_state: @user.status))
|
|
28
|
+
else
|
|
29
|
+
set_notification(false, I18n.t('status.error'), I18n.translate("error"), @user.errors.full_messages.join("<br>"))
|
|
30
|
+
end
|
|
31
|
+
else
|
|
32
|
+
set_notification(false, I18n.t('status.not_found'), I18n.t('status.not_found', item: default_item_name.titleize))
|
|
33
|
+
end
|
|
34
|
+
render_row
|
|
37
35
|
end
|
|
38
36
|
|
|
39
37
|
def masquerade
|
|
40
|
-
@user = User.find(params[:id])
|
|
38
|
+
@user = @r_object = User.find(params[:id])
|
|
41
39
|
masquerade_as_user(@user)
|
|
42
40
|
end
|
|
43
41
|
|
|
@@ -45,12 +43,12 @@ module Usman
|
|
|
45
43
|
|
|
46
44
|
def get_collections
|
|
47
45
|
# Fetching the users
|
|
48
|
-
@relation = User.where("")
|
|
46
|
+
@relation = User.includes(:profile_picture).where("")
|
|
49
47
|
|
|
50
48
|
parse_filters
|
|
51
49
|
apply_filters
|
|
52
50
|
|
|
53
|
-
@users = @relation.
|
|
51
|
+
@users = @r_objects = @relation.page(@current_page).per(@per_page)
|
|
54
52
|
|
|
55
53
|
return true
|
|
56
54
|
end
|
|
@@ -104,6 +102,21 @@ module Usman
|
|
|
104
102
|
}
|
|
105
103
|
end
|
|
106
104
|
|
|
105
|
+
def resource_controller_configuration
|
|
106
|
+
{
|
|
107
|
+
view_path: "usman/admin/users"
|
|
108
|
+
}
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def breadcrumbs_configuration
|
|
112
|
+
{
|
|
113
|
+
heading: "Manage Users",
|
|
114
|
+
description: "Listing all Users",
|
|
115
|
+
links: [{name: "Home", link: admin_dashboard_path, icon: 'fa-home'},
|
|
116
|
+
{name: "Manage Users", link: admin_users_path, icon: 'fa-user', active: true}]
|
|
117
|
+
}
|
|
118
|
+
end
|
|
119
|
+
|
|
107
120
|
def permitted_params
|
|
108
121
|
params.require(:user).permit(:name, :username, :email, :designation, :phone, :password, :password_confirmation)
|
|
109
122
|
end
|
|
@@ -7,27 +7,38 @@ module Usman
|
|
|
7
7
|
skip_before_action :set_navs
|
|
8
8
|
|
|
9
9
|
def sign_in
|
|
10
|
+
set_title("Sign In")
|
|
10
11
|
redirect_to_appropriate_page_after_sign_in if @current_user && !@current_user.token_expired?
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
def create_session
|
|
15
|
+
set_title("Sign In")
|
|
14
16
|
@registration_details = Usman::AuthenticationService.new(params)
|
|
17
|
+
|
|
15
18
|
if @registration_details.error
|
|
16
|
-
|
|
19
|
+
|
|
20
|
+
text = "#{I18n.t("#{@registration_details.error}.heading")}: #{I18n.t("#{@registration_details.error}.message")}"
|
|
21
|
+
set_flash_message(text, :error, false) if defined?(flash) && flash
|
|
22
|
+
|
|
17
23
|
redirect_or_popup_to_default_sign_in_page
|
|
18
24
|
return
|
|
19
25
|
else
|
|
20
26
|
@user = @registration_details.user
|
|
21
27
|
session[:id] = @user.id
|
|
22
28
|
@current_user = @user
|
|
23
|
-
|
|
29
|
+
|
|
30
|
+
text = "#{I18n.t("authentication.logged_in.heading")}: #{I18n.t("authentication.logged_in.message")}"
|
|
31
|
+
set_flash_message(text, :success, false) if defined?(flash) && flash
|
|
32
|
+
|
|
24
33
|
redirect_to_appropriate_page_after_sign_in
|
|
25
34
|
return
|
|
26
35
|
end
|
|
27
36
|
end
|
|
28
37
|
|
|
29
38
|
def sign_out
|
|
30
|
-
|
|
39
|
+
text = "#{I18n.t("authentication.logged_out.heading")}: #{I18n.t("authentication.logged_out.message")}"
|
|
40
|
+
set_flash_message(text, :success, false) if defined?(flash) && flash
|
|
41
|
+
|
|
31
42
|
@current_user.end_session
|
|
32
43
|
session.delete(:id)
|
|
33
44
|
restore_last_user
|
|
@@ -10,12 +10,12 @@ 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
|
-
admin_dashboard_url
|
|
13
|
+
usman.admin_dashboard_url
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
# Returns the default URL to which the system should redirect the user after an unsuccessful attempt to authorise a resource/page
|
|
17
17
|
def default_sign_in_url
|
|
18
|
-
sign_in_url
|
|
18
|
+
usman.sign_in_url
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
# Method to handle the redirection after unsuccesful authentication
|
|
@@ -65,17 +65,24 @@ module Usman
|
|
|
65
65
|
# This method is usually used as a before filter to secure some of the actions which requires the user to be signed in.
|
|
66
66
|
def require_user
|
|
67
67
|
current_user
|
|
68
|
+
|
|
68
69
|
if @current_user
|
|
69
70
|
if @current_user.token_expired?
|
|
70
|
-
#binding.pry
|
|
71
71
|
@current_user = nil
|
|
72
72
|
session.delete(:id)
|
|
73
|
-
|
|
73
|
+
|
|
74
|
+
text = "#{I18n.t("authentication.session_expired.heading")}: #{I18n.t("authentication.session_expired.message")}"
|
|
75
|
+
set_flash_message(text, :error, false) if defined?(flash) && flash
|
|
76
|
+
|
|
74
77
|
redirect_or_popup_to_default_sign_in_page
|
|
75
78
|
return
|
|
79
|
+
else
|
|
80
|
+
@current_user.update_token if @current_user.token_about_to_expire?
|
|
76
81
|
end
|
|
77
82
|
else
|
|
78
|
-
|
|
83
|
+
text = "#{I18n.t("authentication.permission_denied.heading")}: #{I18n.t("authentication.permission_denied.message")}"
|
|
84
|
+
set_flash_message(text, :error, false) if defined?(flash) && flash
|
|
85
|
+
|
|
79
86
|
redirect_or_popup_to_default_sign_in_page
|
|
80
87
|
return
|
|
81
88
|
end
|
|
@@ -84,7 +91,9 @@ module Usman
|
|
|
84
91
|
# This method is usually used as a before filter from admin controllers to ensure that the logged in user is a super admin
|
|
85
92
|
def require_super_admin
|
|
86
93
|
unless @current_user.is_super_admin?
|
|
87
|
-
|
|
94
|
+
text = "#{I18n.t("authentication.permission_denied.heading")}: #{I18n.t("authentication.permission_denied.message")}"
|
|
95
|
+
set_flash_message(text, :error, false) if defined?(flash) && flash
|
|
96
|
+
|
|
88
97
|
redirect_or_popup_to_default_sign_in_page
|
|
89
98
|
end
|
|
90
99
|
end
|
|
@@ -95,7 +104,7 @@ module Usman
|
|
|
95
104
|
return @last_user if @last_user
|
|
96
105
|
if session[:last_user_id].present?
|
|
97
106
|
@last_user = User.find_by_id(session[:last_user_id])
|
|
98
|
-
message = translate("
|
|
107
|
+
message = translate("authentication.sign_in_back", user: @last_user.name)
|
|
99
108
|
set_flash_message(message, :success, false)
|
|
100
109
|
session.destroy()
|
|
101
110
|
session[:id] = @last_user.id if @last_user.present?
|
|
@@ -104,16 +113,13 @@ module Usman
|
|
|
104
113
|
end
|
|
105
114
|
|
|
106
115
|
def masquerade_as_user(user)
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
url = admin_dashboard_url
|
|
115
|
-
redirect_to url
|
|
116
|
-
#end
|
|
116
|
+
message = translate("authentication.masquerade", user: user.name)
|
|
117
|
+
set_flash_message(message, :success, false)
|
|
118
|
+
session[:last_user_id] = current_user.id if current_user
|
|
119
|
+
user.start_session
|
|
120
|
+
session[:id] = user.id
|
|
121
|
+
default_redirect_url_after_sign_in
|
|
122
|
+
redirect_to default_redirect_url_after_sign_in
|
|
117
123
|
end
|
|
118
124
|
|
|
119
125
|
end
|
data/app/models/feature.rb
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
class Feature < ApplicationRecord
|
|
1
|
+
class Feature < Usman::ApplicationRecord
|
|
2
|
+
|
|
3
|
+
require 'import_error_handler.rb'
|
|
4
|
+
extend Usman::ImportErrorHandler
|
|
2
5
|
|
|
3
|
-
extend KuppayamValidators
|
|
4
|
-
|
|
5
6
|
# Constants
|
|
6
7
|
UNPUBLISHED = "unpublished"
|
|
7
8
|
PUBLISHED = "published"
|
|
@@ -25,7 +26,7 @@ class Feature < ApplicationRecord
|
|
|
25
26
|
has_one :feature_image, :as => :imageable, :dependent => :destroy, :class_name => "Image::FeatureImage"
|
|
26
27
|
|
|
27
28
|
# Validations
|
|
28
|
-
|
|
29
|
+
validates :name, presence: true
|
|
29
30
|
validates :status, :presence => true, :inclusion => {:in => STATUS.keys, :presence_of => :status, :message => "%{value} is not a valid status" }
|
|
30
31
|
|
|
31
32
|
# ------------------
|
|
@@ -46,6 +47,51 @@ class Feature < ApplicationRecord
|
|
|
46
47
|
scope :published, -> { where(status: PUBLISHED) }
|
|
47
48
|
scope :disabled, -> { where(status: DISABLED) }
|
|
48
49
|
|
|
50
|
+
def self.save_row_data(row, base_path)
|
|
51
|
+
|
|
52
|
+
image_base_path = base_path + "images/"
|
|
53
|
+
|
|
54
|
+
row.headers.each{ |cell| row[cell] = row[cell].to_s.strip }
|
|
55
|
+
|
|
56
|
+
return if row[:name].blank?
|
|
57
|
+
|
|
58
|
+
feature = Feature.find_by_name(row[:name]) || Feature.new
|
|
59
|
+
feature.name = row[:name]
|
|
60
|
+
feature.status = Feature::UNPUBLISHED
|
|
61
|
+
|
|
62
|
+
# Initializing error hash for displaying all errors altogether
|
|
63
|
+
error_object = Usman::ErrorHash.new
|
|
64
|
+
|
|
65
|
+
## Adding a profile picture
|
|
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?)
|
|
85
|
+
feature.save!
|
|
86
|
+
else
|
|
87
|
+
summary = "Error while saving feature: #{feature.name}"
|
|
88
|
+
details = "Error! #{feature.errors.full_messages.to_sentence}"
|
|
89
|
+
details << ", #{feature.feature_image.errors.full_messages.to_sentence}" if feature.feature_image
|
|
90
|
+
error_object.errors << { summary: summary, details: details }
|
|
91
|
+
end
|
|
92
|
+
return error_object
|
|
93
|
+
end
|
|
94
|
+
|
|
49
95
|
# * Return full name
|
|
50
96
|
# == Examples
|
|
51
97
|
# >>> feature.display_name
|
data/app/models/permission.rb
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
class Permission < ApplicationRecord
|
|
1
|
+
class Permission < Usman::ApplicationRecord
|
|
2
2
|
|
|
3
|
+
require 'import_error_handler.rb'
|
|
4
|
+
extend Usman::ImportErrorHandler
|
|
5
|
+
|
|
3
6
|
# Associations
|
|
4
7
|
belongs_to :user
|
|
5
8
|
belongs_to :feature
|
|
@@ -25,4 +28,49 @@ class Permission < ApplicationRecord
|
|
|
25
28
|
LOWER(u.username) LIKE LOWER('%#{query}%') OR\
|
|
26
29
|
LOWER(u.email) LIKE LOWER('%#{query}%') OR\
|
|
27
30
|
LOWER(f.name) LIKE LOWER('%#{query}%')")}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def self.save_row_data(row, base_path)
|
|
34
|
+
|
|
35
|
+
image_base_path = base_path + "images/"
|
|
36
|
+
|
|
37
|
+
row.headers.each{ |cell| row[cell] = row[cell].to_s.strip }
|
|
38
|
+
|
|
39
|
+
return if row[:user].blank? || row[:feature].blank?
|
|
40
|
+
|
|
41
|
+
# Initializing error hash for displaying all errors altogether
|
|
42
|
+
error_object = Usman::ErrorHash.new
|
|
43
|
+
|
|
44
|
+
user = User.find_by_username(row[:user])
|
|
45
|
+
unless user
|
|
46
|
+
summary = "User '#{row[:user]}' doesn't exist"
|
|
47
|
+
error_object.errors << { summary: summary }
|
|
48
|
+
return error_object
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
feature = Feature.find_by_name(row[:feature])
|
|
52
|
+
unless feature
|
|
53
|
+
summary = "Feature '#{row[:feature]}' doesn't exist"
|
|
54
|
+
error_object.errors << { summary: summary }
|
|
55
|
+
return error_object
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
permission = Permission.where("user_id = ? AND feature_id = ?", user.id, feature.id).first || Permission.new
|
|
59
|
+
permission.user = user
|
|
60
|
+
permission.feature = feature
|
|
61
|
+
permission.can_create = row[:can_create]
|
|
62
|
+
permission.can_read = row[:can_read]
|
|
63
|
+
permission.can_update = row[:can_update]
|
|
64
|
+
permission.can_delete = row[:can_delete]
|
|
65
|
+
|
|
66
|
+
if permission.valid?
|
|
67
|
+
permission.save!
|
|
68
|
+
else
|
|
69
|
+
summary = "Error while saving permission: #{user.name} - #{feature.name}"
|
|
70
|
+
details = "Error! #{permission.errors.full_messages.to_sentence}"
|
|
71
|
+
error_object.errors << { summary: summary, details: details }
|
|
72
|
+
end
|
|
73
|
+
return error_object
|
|
74
|
+
end
|
|
75
|
+
|
|
28
76
|
end
|