Implemented to switch back to old user.
This commit is contained in:
parent
00ac0636a0
commit
ec18cbd58b
7 changed files with 118 additions and 14 deletions
|
@ -23,6 +23,7 @@ class Index extends App.Controller
|
||||||
switchTo = (id,e) =>
|
switchTo = (id,e) =>
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
@disconnectClient()
|
@disconnectClient()
|
||||||
|
$('#app').hide().attr('style', 'display: none!important')
|
||||||
App.Auth._logout()
|
App.Auth._logout()
|
||||||
window.location = App.Config.get('api_path') + '/sessions/switch/' + id
|
window.location = App.Config.get('api_path') + '/sessions/switch/' + id
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
class Widget extends App.Controller
|
||||||
|
events:
|
||||||
|
'click .close': 'switchBack'
|
||||||
|
|
||||||
|
constructor: ->
|
||||||
|
super
|
||||||
|
|
||||||
|
# start widget
|
||||||
|
@bind 'app:ready', =>
|
||||||
|
@render()
|
||||||
|
|
||||||
|
# remove widget
|
||||||
|
@bind 'auth:logout', =>
|
||||||
|
App.Config.set('switch_back_to_possible', false)
|
||||||
|
@render()
|
||||||
|
|
||||||
|
render: (user) ->
|
||||||
|
|
||||||
|
# if no switch to user is active
|
||||||
|
if !App.Config.get('switch_back_to_possible') || _.isEmpty( App.Session.all() )
|
||||||
|
@el.html('')
|
||||||
|
$('#app').removeClass('switch-back-to-user-space')
|
||||||
|
return
|
||||||
|
|
||||||
|
# show switch back widget
|
||||||
|
@html App.view('widget/switch_back_to_user')()
|
||||||
|
$('#app').addClass('switch-back-to-user-space')
|
||||||
|
|
||||||
|
switchBack: (e) =>
|
||||||
|
e.preventDefault()
|
||||||
|
@disconnectClient()
|
||||||
|
$('#app').hide().attr('style', 'display: none!important')
|
||||||
|
App.Auth._logout()
|
||||||
|
window.location = App.Config.get('api_path') + '/sessions/switch_back'
|
||||||
|
|
||||||
|
|
||||||
|
App.Config.set( 'switch_back_to_user', Widget, 'Widgets' )
|
|
@ -0,0 +1,4 @@
|
||||||
|
<div class="switch-back-to-user fit">
|
||||||
|
<%- @T('Zammad looks like this for "%s"', @S('firstname') + ' ' + @S('lastname') ) %>
|
||||||
|
<a href="#" class="close icon "></a>
|
||||||
|
</div>
|
|
@ -1922,7 +1922,7 @@ footer {
|
||||||
.sidebar {
|
.sidebar {
|
||||||
width: 32%;
|
width: 32%;
|
||||||
max-width: 300px;
|
max-width: 300px;
|
||||||
padding: 20px;
|
padding: 8px 20px 20px 20px;
|
||||||
background: white;
|
background: white;
|
||||||
border-right: 1px solid #e6e6e6;
|
border-right: 1px solid #e6e6e6;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
@ -2186,7 +2186,7 @@ footer {
|
||||||
|
|
||||||
.activity-avatar {
|
.activity-avatar {
|
||||||
padding-top: 16px;
|
padding-top: 16px;
|
||||||
padding-left: 14px;
|
padding-left: 2px;
|
||||||
padding-right: 2px;
|
padding-right: 2px;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
@ -2196,7 +2196,7 @@ footer {
|
||||||
|
|
||||||
.activity-body {
|
.activity-body {
|
||||||
color: #444a4f;
|
color: #444a4f;
|
||||||
padding: 16px 26px 16px 2px;
|
padding: 16px 0 16px 2px;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2219,7 +2219,7 @@ footer {
|
||||||
}
|
}
|
||||||
|
|
||||||
.activity-message {
|
.activity-message {
|
||||||
padding-right: 20px;
|
padding-right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.activity-time {
|
.activity-time {
|
||||||
|
@ -3114,6 +3114,19 @@ footer {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.switch-back-to-user {
|
||||||
|
position: absolute;
|
||||||
|
background-color: #389ed9;
|
||||||
|
color: #fff;
|
||||||
|
height: 34px;
|
||||||
|
z-index: 1;
|
||||||
|
padding: 8px 9px;
|
||||||
|
top: -34px;
|
||||||
|
}
|
||||||
|
.switch-back-to-user-space {
|
||||||
|
top: 34px;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
----------------
|
----------------
|
||||||
|
@ -3123,7 +3136,7 @@ footer {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@media only screen and (max-width: 1280px) {
|
@media only screen and (max-width: 1280px) {
|
||||||
.sidebar-optional.sidebar {
|
.sidebar.optional {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -246,7 +246,11 @@ class ApplicationController < ActionController::Base
|
||||||
config['timezones'][ t.name ] = diff
|
config['timezones'][ t.name ] = diff
|
||||||
}
|
}
|
||||||
|
|
||||||
return config
|
if session[:switched_from_user_id]
|
||||||
|
config['switch_back_to_possible'] = true
|
||||||
|
end
|
||||||
|
|
||||||
|
config
|
||||||
end
|
end
|
||||||
|
|
||||||
# model helper
|
# model helper
|
||||||
|
|
|
@ -5,6 +5,9 @@ class SessionsController < ApplicationController
|
||||||
# "Create" a login, aka "log the user in"
|
# "Create" a login, aka "log the user in"
|
||||||
def create
|
def create
|
||||||
|
|
||||||
|
# in case, remove switched_from_user_id
|
||||||
|
session[:switched_from_user_id] = nil
|
||||||
|
|
||||||
# authenticate user
|
# authenticate user
|
||||||
user = User.authenticate( params[:username], params[:password] )
|
user = User.authenticate( params[:username], params[:password] )
|
||||||
|
|
||||||
|
@ -128,6 +131,10 @@ class SessionsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_omniauth
|
def create_omniauth
|
||||||
|
|
||||||
|
# in case, remove switched_from_user_id
|
||||||
|
session[:switched_from_user_id] = nil
|
||||||
|
|
||||||
auth = request.env['omniauth.auth']
|
auth = request.env['omniauth.auth']
|
||||||
|
|
||||||
if !auth
|
if !auth
|
||||||
|
@ -158,6 +165,10 @@ class SessionsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_sso
|
def create_sso
|
||||||
|
|
||||||
|
# in case, remove switched_from_user_id
|
||||||
|
session[:switched_from_user_id] = nil
|
||||||
|
|
||||||
user = User.sso(params)
|
user = User.sso(params)
|
||||||
|
|
||||||
# Log the authorizing user in.
|
# Log the authorizing user in.
|
||||||
|
@ -199,6 +210,9 @@ class SessionsController < ApplicationController
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# remember old user
|
||||||
|
session[:switched_from_user_id] = current_user.id
|
||||||
|
|
||||||
# log new session
|
# log new session
|
||||||
user.activity_stream_log( 'switch to', current_user.id, true )
|
user.activity_stream_log( 'switch to', current_user.id, true )
|
||||||
|
|
||||||
|
@ -208,6 +222,36 @@ class SessionsController < ApplicationController
|
||||||
redirect_to '/#'
|
redirect_to '/#'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# "switch" back to user
|
||||||
|
def switch_back_to_user
|
||||||
|
|
||||||
|
# check if it's a swich back
|
||||||
|
if !session[:switched_from_user_id]
|
||||||
|
response_access_deny
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
user = User.lookup( :id => session[:switched_from_user_id] )
|
||||||
|
if !user
|
||||||
|
render(
|
||||||
|
:json => {},
|
||||||
|
:status => :not_found
|
||||||
|
)
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
# log end session
|
||||||
|
current_user.activity_stream_log( 'ended switch to', user.id, true )
|
||||||
|
|
||||||
|
# remove switched_from_user_id
|
||||||
|
session[:switched_from_user_id] = nil
|
||||||
|
|
||||||
|
# set old session user again
|
||||||
|
current_user_set(user)
|
||||||
|
|
||||||
|
redirect_to '/#'
|
||||||
|
end
|
||||||
|
|
||||||
def list
|
def list
|
||||||
return if deny_if_not_role('Admin')
|
return if deny_if_not_role('Admin')
|
||||||
assets = {}
|
assets = {}
|
||||||
|
|
|
@ -13,6 +13,7 @@ Zammad::Application.routes.draw do
|
||||||
match api_path + '/signout', :to => 'sessions#destroy', :via => [:get, :delete]
|
match api_path + '/signout', :to => 'sessions#destroy', :via => [:get, :delete]
|
||||||
|
|
||||||
match api_path + '/sessions/switch/:id', :to => 'sessions#switch_to_user', :via => :get
|
match api_path + '/sessions/switch/:id', :to => 'sessions#switch_to_user', :via => :get
|
||||||
|
match api_path + '/sessions/switch_back', :to => 'sessions#switch_back_to_user', :via => :get
|
||||||
match api_path + '/sessions', :to => 'sessions#list', :via => :get
|
match api_path + '/sessions', :to => 'sessions#list', :via => :get
|
||||||
match api_path + '/sessions/:id', :to => 'sessions#delete', :via => :delete
|
match api_path + '/sessions/:id', :to => 'sessions#delete', :via => :delete
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue