91 lines
2.3 KiB
Python
91 lines
2.3 KiB
Python
from flaskbase.extensions import admin, db
|
|
from flaskbase.admin import ModelView
|
|
from auth.models import User, Role, Connection
|
|
from jinja2 import Markup
|
|
|
|
from flask import flash, redirect
|
|
from flask_admin.babel import gettext
|
|
from flask_admin.base import expose
|
|
from flask_admin.helpers import (get_redirect_target, flash_errors)
|
|
from flask_security import login_user
|
|
|
|
|
|
class UserModelView(ModelView):
|
|
column_searchable_list = (
|
|
'email', 'current_login_ip', 'last_login_ip',
|
|
)
|
|
|
|
column_list = (
|
|
'email', 'active', 'is_superuser', 'last_login_at', 'last_login_ip',
|
|
'display_name'
|
|
)
|
|
|
|
column_filters = column_list
|
|
column_sortable_list = column_list
|
|
|
|
column_labels = {
|
|
'is_superuser': 'SU',
|
|
}
|
|
|
|
column_descriptions = {
|
|
'is_superuser': 'Superuser',
|
|
}
|
|
|
|
inline_models = (Connection,)
|
|
|
|
list_template = 'admin/user_list.html'
|
|
can_impersonate = True
|
|
|
|
@expose('/impersonate/', methods=('POST',))
|
|
def impersonate_view(self):
|
|
"""
|
|
Impersonate user view. Only POST method is allowed.
|
|
"""
|
|
return_url = get_redirect_target() or self.get_url('.index_view')
|
|
|
|
if not self.can_impersonate:
|
|
return redirect(return_url)
|
|
|
|
form = self.delete_form()
|
|
|
|
if self.validate_form(form):
|
|
# id is Required()
|
|
id = form.id.data
|
|
|
|
model = self.get_one(id)
|
|
|
|
if model is None:
|
|
return redirect(return_url)
|
|
|
|
if login_user(model):
|
|
flash(gettext('You are now %s' % (model,)))
|
|
return redirect('/')
|
|
else:
|
|
flash_errors(form, message='Failed to impersonate. %(error)s')
|
|
|
|
return redirect(return_url)
|
|
|
|
|
|
class ConnectionModelView(ModelView):
|
|
column_list = (
|
|
'user',
|
|
'provider_id',
|
|
'full_name',
|
|
'email',
|
|
)
|
|
|
|
column_formatters = {
|
|
'full_name':
|
|
lambda v, c, m, n: Markup(
|
|
'<a href="%s" target="_blank"><img src="%s" /> %s</a>') % (
|
|
m.profile_url, m.image_url, m.full_name)
|
|
}
|
|
|
|
column_filters = column_list
|
|
column_sortable_list = column_list
|
|
|
|
|
|
admin.add_view(UserModelView(User, db.session))
|
|
admin.add_view(ModelView(Role, db.session))
|
|
admin.add_view(ConnectionModelView(Connection, db.session))
|