mks_auth 1.0.14 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +17 -3
- data/app/assets/config/mks_auth_manifest.js +2 -0
- data/app/assets/javascripts/mks_auth/application.js +13 -0
- data/app/assets/stylesheets/mks_auth/application.css +15 -0
- data/app/controllers/mks/auth/access_controller.rb +51 -0
- data/app/controllers/mks/auth/application_controller.rb +13 -39
- data/app/controllers/mks/auth/application_modules_controller.rb +2 -0
- data/app/controllers/mks/auth/user_roles_controller.rb +32 -40
- data/app/controllers/mks/auth/users_controller.rb +29 -47
- data/app/helpers/mks/auth/access_helper.rb +47 -0
- data/app/helpers/mks/auth/application_helper.rb +10 -0
- data/app/jobs/mks_auth/application_job.rb +4 -0
- data/app/mailers/mks_auth/application_mailer.rb +6 -0
- data/app/models/mks/auth/application_module.rb +3 -3
- data/app/models/mks/auth/menu.rb +5 -5
- data/app/models/mks/auth/user.rb +9 -35
- data/app/models/mks/auth/user_role.rb +5 -10
- data/config/routes.rb +20 -16
- data/db/migrate/20161029065810_create_mks_auth_application_modules.rb +1 -1
- data/db/migrate/20161029065959_create_mks_auth_users.rb +4 -1
- data/db/migrate/20161029070807_create_mks_auth_user_roles.rb +2 -3
- data/db/migrate/20161029071047_create_mks_users_user_roles.rb +4 -4
- data/db/migrate/20161029072256_create_mks_auth_menus.rb +3 -3
- data/db/migrate/20161029074023_create_mks_menus_user_roles.rb +3 -3
- data/lib/mks/auth/engine.rb +12 -5
- data/lib/mks/auth/version.rb +1 -1
- data/lib/mks_auth.rb +0 -1
- data/spec/controllers/mks/auth/users_controller_spec.rb +2 -91
- data/spec/dummy/config/application.rb +0 -2
- data/spec/dummy/config/database.yml +3 -5
- data/spec/dummy/config/initializers/new_framework_defaults.rb +1 -1
- data/spec/dummy/db/schema.rb +35 -442
- data/spec/factories/application_modules.rb +1 -1
- data/spec/factories/menus.rb +2 -2
- data/spec/factories/user_roles.rb +1 -2
- data/spec/factories/users.rb +3 -2
- data/spec/models/mks/auth/application_module_spec.rb +1 -2
- data/spec/models/mks/auth/user_role_spec.rb +0 -6
- data/spec/models/mks/auth/user_spec.rb +0 -33
- data/spec/rails_helper.rb +0 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/support/factory_girl.rb +2 -2
- metadata +95 -140
- data/app/controllers/mks/auth/menus_controller.rb +0 -29
- data/db/migrate/20180201104912_create_mks_users_application_modules.rb +0 -12
- data/lib/mks/auth/token_auth.rb +0 -19
- data/spec/controllers/mks/auth/menus_controller_spec.rb +0 -53
- data/spec/controllers/mks/auth/user_roles_controller_spec.rb +0 -129
- data/spec/dummy/log/development.log +0 -16526
- data/spec/dummy/log/test.log +0 -49665
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9befc13ee79dba3fce47aa04621b0cbab4983d6f32e22eefa8f8ea038dc0235
|
4
|
+
data.tar.gz: 8799d30c67e91c2f773bae8715e17a6b17bbf2fcff1bb1a232761955f142778a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bded2f7264869bf5dfb2437d39f5e6c5950a1c949c9effc36522fc547f40299dabb9e9e72b87a7f852af39f4daf7f4e3bd6b0ad2a0f5cbe02a278b190eb21e70
|
7
|
+
data.tar.gz: 510531747665163e392c2593ce3f9815c506d7555347a7e2a20da552954b803bf7cbd0aa7a2bcbbab34242a062d99cc5f29ba9b236c89b00cd031e8882a81a17
|
data/Rakefile
CHANGED
@@ -14,10 +14,24 @@ RDoc::Task.new(:rdoc) do |rdoc|
|
|
14
14
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
15
|
end
|
16
16
|
|
17
|
-
APP_RAKEFILE = File.expand_path('spec/dummy/Rakefile',
|
17
|
+
APP_RAKEFILE = File.expand_path('../spec/dummy/Rakefile', __FILE__)
|
18
|
+
|
18
19
|
load 'rails/tasks/engine.rake'
|
20
|
+
|
19
21
|
load 'rails/tasks/statistics.rake'
|
20
22
|
|
21
|
-
|
23
|
+
Bundler::GemHelper.install_tasks
|
24
|
+
|
25
|
+
Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each {|f| load f }
|
26
|
+
|
27
|
+
require 'bundler/gem_tasks'
|
28
|
+
|
29
|
+
require 'rspec/core'
|
30
|
+
|
22
31
|
require 'rspec/core/rake_task'
|
23
|
-
|
32
|
+
|
33
|
+
desc 'Run all specs in spec directory (excluding plugin specs)'
|
34
|
+
|
35
|
+
RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare')
|
36
|
+
|
37
|
+
task :default => :spec
|
@@ -0,0 +1,13 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// compiled file. JavaScript code in this file should be added after the last require_* statement.
|
9
|
+
//
|
10
|
+
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
|
11
|
+
// about supported directives.
|
12
|
+
//
|
13
|
+
//= require_tree .
|
@@ -0,0 +1,15 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
9
|
+
* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
|
10
|
+
* files in this directory. Styles in this file should be added after the last require_* statement.
|
11
|
+
* It is generally better to create a new file per style scope.
|
12
|
+
*
|
13
|
+
*= require_tree .
|
14
|
+
*= require_self
|
15
|
+
*/
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require_dependency 'mks/auth/application_controller'
|
2
|
+
|
3
|
+
module Mks
|
4
|
+
module Auth
|
5
|
+
class AccessController < ApplicationController
|
6
|
+
before_action :confirm_logged_in, :except => [:attempt_login, :logout, :menu, :csrf_token]
|
7
|
+
|
8
|
+
def csrf_token
|
9
|
+
cookies['XSRF-TOKEN'] = form_authenticity_token if protect_against_forgery?
|
10
|
+
render json: {success: true}
|
11
|
+
end
|
12
|
+
|
13
|
+
def attempt_login
|
14
|
+
code = Rails.configuration.app_code
|
15
|
+
app_module = ApplicationModule.find_by(code: code)
|
16
|
+
user = User.find_by(email: params[:email].downcase)
|
17
|
+
|
18
|
+
if user && user.application_module.id == app_module.id
|
19
|
+
if user.authenticate(params[:password])
|
20
|
+
login_user user
|
21
|
+
roles = user.roles.map(&:name)
|
22
|
+
response = { success: true, data: {user_id: user.id, user_full_name: user.full_name, roles: roles }}
|
23
|
+
render json: response
|
24
|
+
else
|
25
|
+
render json: {success: false, errors: "Invalid username or password"}
|
26
|
+
end
|
27
|
+
else
|
28
|
+
render json: {success: false, errors: "User doesn't exist or is not allowed!"}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def logout
|
33
|
+
logout_user if logged_in?
|
34
|
+
render json: { success: true }
|
35
|
+
end
|
36
|
+
|
37
|
+
def menu
|
38
|
+
render json: {success: true, data: fetch_menus}
|
39
|
+
end
|
40
|
+
|
41
|
+
def check_login
|
42
|
+
if session[:user_id]
|
43
|
+
user = User.find(session[:user_id])
|
44
|
+
render json: {success: true, data: user.full_name}
|
45
|
+
else
|
46
|
+
render json: {success: false}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -1,50 +1,24 @@
|
|
1
|
-
require 'mks/auth/token_auth'
|
2
|
-
|
3
1
|
module Mks
|
4
2
|
module Auth
|
5
|
-
class ApplicationController < ActionController::
|
6
|
-
|
7
|
-
|
8
|
-
def logged_in?
|
9
|
-
!current_user.nil?
|
10
|
-
end
|
11
|
-
|
12
|
-
def current_user
|
13
|
-
return unless auth_present?
|
14
|
-
user = User.find(auth['id'])
|
15
|
-
@current_user ||= user if user
|
16
|
-
end
|
17
|
-
|
18
|
-
def current_user_id
|
19
|
-
auth['id']
|
20
|
-
end
|
21
|
-
|
22
|
-
def app_code
|
23
|
-
Rails.application.config.app_code
|
24
|
-
end
|
3
|
+
class ApplicationController < ActionController::Base
|
4
|
+
include AccessHelper
|
5
|
+
include ApplicationHelper
|
25
6
|
|
26
7
|
private
|
27
8
|
|
28
|
-
def
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
9
|
+
def confirm_logged_in
|
10
|
+
if session[:user_id]
|
11
|
+
true
|
12
|
+
else
|
13
|
+
redirect_to '/'
|
14
|
+
false
|
15
|
+
end
|
34
16
|
end
|
35
17
|
|
36
|
-
|
37
|
-
TokenAuth.decode(token)
|
38
|
-
end
|
39
|
-
|
40
|
-
def auth_present?
|
41
|
-
bearer = request.env.fetch('HTTP_AUTHORIZATION', '').scan(/Bearer/).flatten.first
|
42
|
-
!bearer.nil?
|
43
|
-
end
|
18
|
+
protected
|
44
19
|
|
45
|
-
def
|
46
|
-
|
47
|
-
ApplicationModule.find_by(code: code)
|
20
|
+
def verified_request?
|
21
|
+
super || valid_authenticity_token?(session, request.headers['X-XSRF-TOKEN'])
|
48
22
|
end
|
49
23
|
end
|
50
24
|
end
|
@@ -1,59 +1,51 @@
|
|
1
|
+
require_dependency 'mks/auth/application_controller'
|
2
|
+
|
1
3
|
module Mks
|
2
4
|
module Auth
|
3
5
|
class UserRolesController < ApplicationController
|
4
|
-
before_action :
|
5
|
-
before_action :set_user, only: %i[assigned_roles assign_roles]
|
6
|
+
# before_action :confirm_logged_in
|
6
7
|
|
7
8
|
# GET /user_roles
|
8
9
|
def index
|
9
|
-
user_roles = UserRole.
|
10
|
-
|
11
|
-
|
12
|
-
render json: user_roles
|
13
|
-
end
|
14
|
-
|
15
|
-
def users
|
16
|
-
render json: @role.users
|
10
|
+
@user_roles = UserRole.all.order(:name)
|
11
|
+
response = { success: true, data: @user_roles }
|
12
|
+
render json: response
|
17
13
|
end
|
18
14
|
|
19
|
-
def
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
15
|
+
def get_assigned_roles
|
16
|
+
user = User.find(params[:user_id])
|
17
|
+
user_roles = UserRole.all.order(:name)
|
18
|
+
data = []
|
19
|
+
user_roles.each do |user_role|
|
20
|
+
item = {id: user_role.id, name: user_role.name}
|
21
|
+
if user.roles.include? user_role
|
22
|
+
item[:selected] = true
|
23
|
+
else
|
24
|
+
item[:selected] = false
|
25
|
+
end
|
26
|
+
data << item
|
27
|
+
end
|
29
28
|
response = { success: true, data: data }
|
30
29
|
render json: response
|
31
30
|
end
|
32
31
|
|
33
|
-
# A method which assigns selected roles to a user.
|
34
|
-
# This method expects that only selected roles
|
35
|
-
# (i.e. roles with `selected` attribute set to true).
|
36
|
-
# It removes all other roles and assigns those selected
|
37
|
-
# roles to the user.
|
38
32
|
def assign_roles
|
39
|
-
|
40
|
-
|
41
|
-
@user.roles.destroy_all
|
42
|
-
@user.roles = user_roles
|
43
|
-
|
44
|
-
response = { success: true, message: 'Role assignment successful!' }
|
45
|
-
render json: response
|
46
|
-
end
|
33
|
+
user = User.find(params[:user_id])
|
34
|
+
roles = params[:roles]
|
47
35
|
|
36
|
+
roles.each do |role|
|
37
|
+
user_role = UserRole.find role[:id]
|
38
|
+
if role[:selected]
|
39
|
+
user.roles << user_role
|
40
|
+
else
|
41
|
+
user.roles.destroy user_role
|
42
|
+
end
|
43
|
+
end
|
48
44
|
|
49
|
-
|
45
|
+
user.save
|
50
46
|
|
51
|
-
|
52
|
-
|
53
|
-
end
|
54
|
-
|
55
|
-
def set_user
|
56
|
-
@user = User.find(params[:id])
|
47
|
+
response = { success: true, message: 'Role assignment successful!' }
|
48
|
+
render json: response
|
57
49
|
end
|
58
50
|
end
|
59
51
|
end
|
@@ -1,68 +1,58 @@
|
|
1
|
+
require_dependency 'mks/auth/application_controller'
|
2
|
+
|
1
3
|
module Mks
|
2
4
|
module Auth
|
3
5
|
class UsersController < ApplicationController
|
4
|
-
|
5
|
-
before_action :set_user, only: %i[update user_roles save_selected_roles]
|
6
|
+
before_action :set_user, only: [:update]
|
6
7
|
|
7
8
|
def index
|
8
|
-
@users =
|
9
|
-
|
9
|
+
@users = User.where(application_module_id: app_module.id)
|
10
|
+
response = { success: true, data: @users }
|
11
|
+
render json: response
|
10
12
|
end
|
11
13
|
|
12
14
|
def roles
|
13
|
-
user = User.find(
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
# A method to fetch all roles, with roles of
|
18
|
-
# a user marked as selected
|
19
|
-
def user_roles
|
20
|
-
all_roles = UserRole.joins(:application_module).where(mks_auth_application_modules: { code: app_code })
|
21
|
-
roles = all_roles.map { |r| { id: r.id, name: r.name, selected: @user.roles.include?(r) } }
|
22
|
-
render json: roles
|
15
|
+
user = User.find(session[:user_id])
|
16
|
+
data = user.roles.map { |role| {id: role.id, name: role.name} }
|
17
|
+
response = {success: true, data: data}
|
18
|
+
render json: response
|
23
19
|
end
|
24
20
|
|
25
|
-
def
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
21
|
+
def fetch_by_role
|
22
|
+
r = params[:role]
|
23
|
+
role = UserRole.find_by(name: r)
|
24
|
+
unless role
|
25
|
+
raise 'Role not found'
|
26
|
+
end
|
27
|
+
response = { success: true, data: role.users }
|
28
|
+
render json: response
|
31
29
|
end
|
32
30
|
|
33
31
|
def create
|
34
32
|
@user = User.new(user_params)
|
35
|
-
|
36
|
-
@user.application_modules = [app_module]
|
33
|
+
@user.application_module_id = app_module.id
|
37
34
|
if @user.save
|
38
|
-
|
35
|
+
response = { success: true, message: 'User saved successfully' }
|
36
|
+
render json: response
|
39
37
|
else
|
40
|
-
|
38
|
+
errors = Mks::Common::Util.error_messages @user, 'User'
|
39
|
+
response = { success: false, errors: errors }
|
40
|
+
render json: response
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
44
|
def update
|
45
45
|
if @user.update(user_params)
|
46
|
-
|
47
|
-
|
48
|
-
render json: { success: false, error: @user.errors.full_messages[0] }, status: :unprocessable_entity
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def login
|
53
|
-
user = User.find_by(email: auth_params[:email])
|
54
|
-
if user.authenticate(auth_params[:password]) &&
|
55
|
-
user.has_module(auth_params[:app_module])
|
56
|
-
|
57
|
-
jwt = TokenAuth.issue(user.to_token_payload)
|
58
|
-
render json: { jwt: jwt }
|
46
|
+
response = { success: true, message: 'User updated successfully' }
|
47
|
+
render json: response
|
59
48
|
else
|
60
|
-
|
49
|
+
errors = Mks::Common::Util.error_messages @user, 'User'
|
50
|
+
response = { success: false, errors: errors }
|
51
|
+
render json: response
|
61
52
|
end
|
62
53
|
end
|
63
54
|
|
64
55
|
private
|
65
|
-
|
66
56
|
# Use callbacks to share common setup or constraints between actions.
|
67
57
|
def set_user
|
68
58
|
@user = User.find(params[:id])
|
@@ -72,14 +62,6 @@ module Mks
|
|
72
62
|
def user_params
|
73
63
|
params.require(:user).permit(:first_name, :last_name, :email, :password)
|
74
64
|
end
|
75
|
-
|
76
|
-
def auth_params
|
77
|
-
params.require(:auth).permit(:email, :password, :app_module)
|
78
|
-
end
|
79
|
-
|
80
|
-
def save_selected_roles_params
|
81
|
-
params.permit(roles: %i[id selected])
|
82
|
-
end
|
83
65
|
end
|
84
66
|
end
|
85
67
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Mks
|
2
|
+
module Auth
|
3
|
+
module AccessHelper
|
4
|
+
def login_user(user)
|
5
|
+
session[:user_id] = user.id
|
6
|
+
end
|
7
|
+
|
8
|
+
def current_user
|
9
|
+
@current_user ||= User.find_by(id: session[:user_id])
|
10
|
+
end
|
11
|
+
|
12
|
+
def logged_in?
|
13
|
+
!current_user.nil?
|
14
|
+
end
|
15
|
+
|
16
|
+
def logout_user
|
17
|
+
session.delete(:user_id)
|
18
|
+
@current_user = nil
|
19
|
+
@menus = nil
|
20
|
+
end
|
21
|
+
|
22
|
+
def fetch_menus
|
23
|
+
if @menus.nil?
|
24
|
+
roles = current_user.roles
|
25
|
+
app_module = current_user.application_module
|
26
|
+
|
27
|
+
@menus = []
|
28
|
+
roles.each do |role|
|
29
|
+
if role
|
30
|
+
menu_list = role.menus.where(:parent => nil, :application_module => app_module)
|
31
|
+
menu_list.each do |menu|
|
32
|
+
children = []
|
33
|
+
menu.children.order(:text).each do |child|
|
34
|
+
if child.roles.include? role
|
35
|
+
children << {'text': child.text, 'className': child.class_name, 'iconCls': child.icon_cls}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
@menus << {'text': menu.text, 'children': children, 'iconCls': menu.icon_cls}
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
@menus
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|