mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-20 19:08:21 +00:00
List database and ldap users in sysadmin
This commit is contained in:
@@ -7,7 +7,7 @@ from django.dispatch import receiver
|
|||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
from pysearpc import SearpcError
|
from pysearpc import SearpcError
|
||||||
from seaserv import seafile_api, get_emailusers
|
from seaserv import seafile_api
|
||||||
|
|
||||||
from seahub.auth.signals import user_logged_in
|
from seahub.auth.signals import user_logged_in
|
||||||
from seahub.shortcuts import get_first_object_or_none
|
from seahub.shortcuts import get_first_object_or_none
|
||||||
|
46
seahub/templates/sysadmin/sys_ldap_useradmin.html
Normal file
46
seahub/templates/sysadmin/sys_ldap_useradmin.html
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
{% extends "admin_base.html" %}
|
||||||
|
{% load seahub_tags i18n %}
|
||||||
|
{% block nav_useradmin_class %}class="cur"{% endblock %}
|
||||||
|
|
||||||
|
{% block title_panel %}
|
||||||
|
<div class="tabnav">
|
||||||
|
<ul class="tabnav-tabs">
|
||||||
|
<li class="tabnav-tab"><a href="{% url 'sys_useradmin' %}">{% trans "Database" %}</a></li>
|
||||||
|
<li class="tabnav-tab tabnav-tab-cur">{% trans "LDAP" %}</li>
|
||||||
|
</ul>
|
||||||
|
<button class="icon-search fright" id="search-user-btn"> {% trans "Search" %}</button>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block main_panel %}
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th width="80%">{% trans "Email" %}</th>
|
||||||
|
<th width="20%">{% trans "Space Used" %}</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
{% for user in users %}
|
||||||
|
<tr>
|
||||||
|
<td data="{{user.id}}"><a href="{{ SITE_ROOT }}useradmin/info/{{ user.props.email }}/">{{ user.email }}</a></td>
|
||||||
|
<td>
|
||||||
|
{% if CALC_SHARE_USAGE %}
|
||||||
|
{{ user.self_usage|filesizeformat }} + {{ user.share_usage|filesizeformat }} {% if user.quota > 0 %} / {{ user.quota|filesizeformat }} {% endif %}
|
||||||
|
{% else %}
|
||||||
|
{{ user.self_usage|filesizeformat }} {% if user.quota > 0 %} / {{ user.quota|filesizeformat }} {% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
{% include "sysadmin/useradmin_paginator.html" %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block extra_script %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
$('#search-user-btn').click(function() {
|
||||||
|
location.href = "{% url 'user_search' %}";
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
@@ -2,11 +2,23 @@
|
|||||||
{% load seahub_tags i18n %}
|
{% load seahub_tags i18n %}
|
||||||
{% block nav_useradmin_class %}class="cur"{% endblock %}
|
{% block nav_useradmin_class %}class="cur"{% endblock %}
|
||||||
|
|
||||||
|
{% block title_panel %}
|
||||||
|
<div class="tabnav">
|
||||||
|
<ul class="tabnav-tabs">
|
||||||
|
<li class="tabnav-tab tabnav-tab-cur">{% trans "Database" %}</li>
|
||||||
|
{% if have_ldap %}
|
||||||
|
<li class="tabnav-tab"><a href="{% url 'sys_ldap_useradmin' %}">{% trans "LDAP" %}</a></li>
|
||||||
|
{% endif %}
|
||||||
|
</ul>
|
||||||
|
<button class="icon-search fright" id="search-user-btn"> {% trans "Search" %}</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
{% block main_panel %}
|
{% block main_panel %}
|
||||||
|
|
||||||
<h3>{% trans "All Members" %}</h3>
|
|
||||||
<button class="add" id="add-user-btn">{% trans "Add new user" %}</button>
|
<button class="add" id="add-user-btn">{% trans "Add new user" %}</button>
|
||||||
<button class="icon-search fright" id="search-user-btn"> {% trans "Search" %}</button>
|
|
||||||
|
|
||||||
<form id="add-user-form" action="" method="post" class="hide">{% csrf_token %}
|
<form id="add-user-form" action="" method="post" class="hide">{% csrf_token %}
|
||||||
<h3>{% trans "Add new user" %}</h3>
|
<h3>{% trans "Add new user" %}</h3>
|
||||||
@@ -21,34 +33,7 @@
|
|||||||
</form>
|
</form>
|
||||||
|
|
||||||
{% include "sysadmin/useradmin_table.html"%}
|
{% include "sysadmin/useradmin_table.html"%}
|
||||||
|
{% include "sysadmin/useradmin_paginator.html" %}
|
||||||
<div id="paginator">
|
|
||||||
{% if current_page != 1 %}
|
|
||||||
<a href="{{ SITE_ROOT }}sys/useradmin/?page={{ prev_page }}&per_page={{ per_page }}">{% trans "Previous" %}</a>
|
|
||||||
{% endif %}
|
|
||||||
{% if page_next %}
|
|
||||||
<a href="{{ SITE_ROOT }}sys/useradmin/?page={{ next_page }}&per_page={{ per_page }}">{% trans "Next" %}</a>
|
|
||||||
{% endif %}
|
|
||||||
{% if current_page != 1 or page_next %}
|
|
||||||
|
|
|
||||||
{% endif %}
|
|
||||||
<span>{% trans "Per page: " %}</span>
|
|
||||||
{% if per_page == 25 %}
|
|
||||||
<span> 25 </span>
|
|
||||||
{% else %}
|
|
||||||
<a href="{{ SITE_ROOT}}sys/useradmin/?per_page=25" class="per-page">25</a>
|
|
||||||
{% endif %}
|
|
||||||
{% if per_page == 50 %}
|
|
||||||
<span> 50 </span>
|
|
||||||
{% else %}
|
|
||||||
<a href="{{ SITE_ROOT}}sys/useradmin/?per_page=50" class="per-page">50</a>
|
|
||||||
{% endif %}
|
|
||||||
{% if per_page == 100 %}
|
|
||||||
<span> 100 </span>
|
|
||||||
{% else %}
|
|
||||||
<a href="{{ SITE_ROOT}}sys/useradmin/?per_page=100" class="per-page">100</a>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
@@ -11,7 +11,60 @@
|
|||||||
</form>
|
</form>
|
||||||
<h3>{% trans "Result"%}</h3>
|
<h3>{% trans "Result"%}</h3>
|
||||||
{% if users %}
|
{% if users %}
|
||||||
{% include "sysadmin/useradmin_table.html" %}
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th width="30%">{% trans "Email" %}</th>
|
||||||
|
<th width="10%">{% trans "Status" %}</th>
|
||||||
|
<th width="20%">{% trans "Space Used" %}</th>
|
||||||
|
<th width="15%">{% trans "Create At" %}</th>
|
||||||
|
<th width="25%">{% trans "Operations" %}</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
{% for user in users %}
|
||||||
|
<tr>
|
||||||
|
<td data="{{user.id}}"><a href="{{ SITE_ROOT }}useradmin/info/{{ user.props.email }}/">{{ user.email }}</a></td>
|
||||||
|
<td>
|
||||||
|
{% if user.source != 'LDAP' %}
|
||||||
|
<div class="user-status">
|
||||||
|
{% if user.is_active %}
|
||||||
|
<span class="user-status-cur-value">{% trans "Active" %}</span>
|
||||||
|
{% else %}
|
||||||
|
<span class="user-status-cur-value">{% trans "Inactive" %}</span>
|
||||||
|
{% endif %}
|
||||||
|
<img src="{{MEDIA_URL}}img/edit_12.png" alt="{% trans "Edit"%}" title="{% trans "Edit"%}" class="user-status-edit-icon vh" />
|
||||||
|
</div>
|
||||||
|
<select name="permission" class="user-status-select hide">
|
||||||
|
<option value="1" {%if user.is_active %}selected="selected"{% endif %}>{% trans "Active" %}</option>
|
||||||
|
<option value="0" {%if not user.is_active %}selected="selected"{% endif %}>{% trans "Inactive"%}</option>
|
||||||
|
|
||||||
|
</select>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
{% if CALC_SHARE_USAGE %}
|
||||||
|
{{ user.self_usage|filesizeformat }} + {{ user.share_usage|filesizeformat }} {% if user.quota > 0 %} / {{ user.quota|filesizeformat }} {% endif %}
|
||||||
|
{% else %}
|
||||||
|
{{ user.self_usage|filesizeformat }} {% if user.quota > 0 %} / {{ user.quota|filesizeformat }} {% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>{% if user.source != 'LDAP' %}{{ user.ctime|tsstr_sec }}{% endif %}</td>
|
||||||
|
<td>
|
||||||
|
{% if user.source != 'LDAP' %}
|
||||||
|
{% if not user.is_self %}
|
||||||
|
<a href="#" class="remove-user-btn op" data-url="{{ SITE_ROOT }}useradmin/remove/{{ user.props.id }}/" data-target="{{ user.props.email }}">{% trans "Delete" %}</a>
|
||||||
|
<a href="#" class="reset-user-btn op" data-url="{% url 'user_reset' user.id %}" data-target="{{ user.props.email }}">{% trans "ResetPwd" %}</a>
|
||||||
|
{% if user.is_staff %}
|
||||||
|
<a href="#" data-url="{% url 'user_remove_admin' user.id %}" data-target="{{ user.props.email }}" class="revoke-admin-btn op">{% trans "Revoke Admin" %}</a>
|
||||||
|
{% else %}
|
||||||
|
<a href="#" data-url="{% url 'user_make_admin' user.id %}" data-target="{{ user.props.email }}" class="set-admin-btn op">{% trans "Set Admin" %}</a>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>{% trans "No result" %}</p>
|
<p>{% trans "No result" %}</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
28
seahub/templates/sysadmin/useradmin_paginator.html
Normal file
28
seahub/templates/sysadmin/useradmin_paginator.html
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{% load i18n%}
|
||||||
|
<div id="paginator">
|
||||||
|
{% if current_page != 1 %}
|
||||||
|
<a href="?page={{ prev_page }}&per_page={{ per_page }}">{% trans "Previous" %}</a>
|
||||||
|
{% endif %}
|
||||||
|
{% if page_next %}
|
||||||
|
<a href="?page={{ next_page }}&per_page={{ per_page }}">{% trans "Next" %}</a>
|
||||||
|
{% endif %}
|
||||||
|
{% if current_page != 1 or page_next %}
|
||||||
|
|
|
||||||
|
{% endif %}
|
||||||
|
<span>{% trans "Per page: " %}</span>
|
||||||
|
{% if per_page == 25 %}
|
||||||
|
<span> 25 </span>
|
||||||
|
{% else %}
|
||||||
|
<a href="?per_page=25" class="per-page">25</a>
|
||||||
|
{% endif %}
|
||||||
|
{% if per_page == 50 %}
|
||||||
|
<span> 50 </span>
|
||||||
|
{% else %}
|
||||||
|
<a href="?per_page=50" class="per-page">50</a>
|
||||||
|
{% endif %}
|
||||||
|
{% if per_page == 100 %}
|
||||||
|
<span> 100 </span>
|
||||||
|
{% else %}
|
||||||
|
<a href="?per_page=100" class="per-page">100</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
@@ -19,7 +19,7 @@ from seahub.views.sysadmin import sys_repo_admin, sys_user_admin, user_search,\
|
|||||||
sys_group_admin, user_info, user_add, user_remove, user_make_admin, \
|
sys_group_admin, user_info, user_add, user_remove, user_make_admin, \
|
||||||
user_remove_admin, user_reset, user_activate, sys_publink_admin, \
|
user_remove_admin, user_reset, user_activate, sys_publink_admin, \
|
||||||
sys_repo_search, sys_repo_transfer, sys_list_orphan, user_deactivate, \
|
sys_repo_search, sys_repo_transfer, sys_list_orphan, user_deactivate, \
|
||||||
user_toggle_status
|
user_toggle_status, sys_ldap_user_admin
|
||||||
from seahub.views.ajax import *
|
from seahub.views.ajax import *
|
||||||
|
|
||||||
# Uncomment the next two lines to enable the admin:
|
# Uncomment the next two lines to enable the admin:
|
||||||
@@ -152,6 +152,7 @@ urlpatterns = patterns('',
|
|||||||
url(r'^sys/seafadmin/search/$', sys_repo_search, name='sys_repo_search'),
|
url(r'^sys/seafadmin/search/$', sys_repo_search, name='sys_repo_search'),
|
||||||
url(r'^sys/seafadmin/transfer/$', sys_repo_transfer, name='sys_repo_transfer'),
|
url(r'^sys/seafadmin/transfer/$', sys_repo_transfer, name='sys_repo_transfer'),
|
||||||
url(r'^sys/useradmin/$', sys_user_admin, name='sys_useradmin'),
|
url(r'^sys/useradmin/$', sys_user_admin, name='sys_useradmin'),
|
||||||
|
url(r'^sys/ldapuseradmin/$', sys_ldap_user_admin, name='sys_ldap_useradmin'),
|
||||||
url(r'^sys/groupadmin/$', sys_group_admin, name='sys_group_admin'),
|
url(r'^sys/groupadmin/$', sys_group_admin, name='sys_group_admin'),
|
||||||
url(r'^sys/publinkadmin/$', sys_publink_admin, name='sys_publink_admin'),
|
url(r'^sys/publinkadmin/$', sys_publink_admin, name='sys_publink_admin'),
|
||||||
url(r'^sys/notificationadmin/', notification_list, name='notification_list'),
|
url(r'^sys/notificationadmin/', notification_list, name='notification_list'),
|
||||||
|
@@ -1709,8 +1709,16 @@ def pubuser(request):
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
current_page = 1
|
current_page = 1
|
||||||
per_page = 20 # show 20 users per-page
|
per_page = 20 # show 20 users per-page
|
||||||
users_plus_one = seaserv.get_emailusers(per_page * (current_page - 1),
|
|
||||||
|
# Get ldap users first, if no users found, use database.
|
||||||
|
users_plus_one = seaserv.get_emailusers('LDAP',
|
||||||
|
per_page * (current_page - 1),
|
||||||
per_page + 1)
|
per_page + 1)
|
||||||
|
if len(users_plus_one) == 0:
|
||||||
|
users_plus_one = seaserv.get_emailusers('DB',
|
||||||
|
per_page * (current_page - 1),
|
||||||
|
per_page + 1)
|
||||||
|
|
||||||
has_prev = False if current_page == 1 else True
|
has_prev = False if current_page == 1 else True
|
||||||
has_next = True if len(users_plus_one) == per_page + 1 else False
|
has_next = True if len(users_plus_one) == per_page + 1 else False
|
||||||
num_pages = int(ceil(emailusers_count / float(per_page)))
|
num_pages = int(ceil(emailusers_count / float(per_page)))
|
||||||
|
@@ -124,6 +124,8 @@ def sys_repo_search(request):
|
|||||||
@login_required
|
@login_required
|
||||||
@sys_staff_required
|
@sys_staff_required
|
||||||
def sys_user_admin(request):
|
def sys_user_admin(request):
|
||||||
|
"""List all users from database.
|
||||||
|
"""
|
||||||
# Make sure page request is an int. If not, deliver first page.
|
# Make sure page request is an int. If not, deliver first page.
|
||||||
try:
|
try:
|
||||||
current_page = int(request.GET.get('page', '1'))
|
current_page = int(request.GET.get('page', '1'))
|
||||||
@@ -131,7 +133,53 @@ def sys_user_admin(request):
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
current_page = 1
|
current_page = 1
|
||||||
per_page = 25
|
per_page = 25
|
||||||
users_plus_one = get_emailusers(per_page * (current_page - 1), per_page + 1)
|
users_plus_one = get_emailusers('DB', per_page * (current_page - 1), per_page + 1)
|
||||||
|
if len(users_plus_one) == per_page + 1:
|
||||||
|
page_next = True
|
||||||
|
else:
|
||||||
|
page_next = False
|
||||||
|
|
||||||
|
users = users_plus_one[:per_page]
|
||||||
|
for user in users:
|
||||||
|
if user.props.id == request.user.id:
|
||||||
|
user.is_self = True
|
||||||
|
try:
|
||||||
|
user.self_usage = seafile_api.get_user_self_usage(user.email)
|
||||||
|
user.share_usage = seafile_api.get_user_share_usage(user.email)
|
||||||
|
user.quota = seafile_api.get_user_quota(user.email)
|
||||||
|
except:
|
||||||
|
user.self_usage = -1
|
||||||
|
user.share_usage = -1
|
||||||
|
user.quota = -1
|
||||||
|
|
||||||
|
have_ldap = True if len(get_emailusers('LDAP', 0, 1)) > 0 else False
|
||||||
|
|
||||||
|
return render_to_response(
|
||||||
|
'sysadmin/sys_useradmin.html', {
|
||||||
|
'users': users,
|
||||||
|
'current_page': current_page,
|
||||||
|
'prev_page': current_page-1,
|
||||||
|
'next_page': current_page+1,
|
||||||
|
'per_page': per_page,
|
||||||
|
'page_next': page_next,
|
||||||
|
'CALC_SHARE_USAGE': CALC_SHARE_USAGE,
|
||||||
|
'have_ldap': have_ldap,
|
||||||
|
},
|
||||||
|
context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
@sys_staff_required
|
||||||
|
def sys_ldap_user_admin(request):
|
||||||
|
"""List all users from LDAP.
|
||||||
|
"""
|
||||||
|
# Make sure page request is an int. If not, deliver first page.
|
||||||
|
try:
|
||||||
|
current_page = int(request.GET.get('page', '1'))
|
||||||
|
per_page = int(request.GET.get('per_page', '25'))
|
||||||
|
except ValueError:
|
||||||
|
current_page = 1
|
||||||
|
per_page = 25
|
||||||
|
users_plus_one = get_emailusers('LDAP', per_page * (current_page - 1), per_page + 1)
|
||||||
if len(users_plus_one) == per_page + 1:
|
if len(users_plus_one) == per_page + 1:
|
||||||
page_next = True
|
page_next = True
|
||||||
else:
|
else:
|
||||||
@@ -151,7 +199,7 @@ def sys_user_admin(request):
|
|||||||
user.quota = -1
|
user.quota = -1
|
||||||
|
|
||||||
return render_to_response(
|
return render_to_response(
|
||||||
'sysadmin/sys_useradmin.html', {
|
'sysadmin/sys_ldap_useradmin.html', {
|
||||||
'users': users,
|
'users': users,
|
||||||
'current_page': current_page,
|
'current_page': current_page,
|
||||||
'prev_page': current_page-1,
|
'prev_page': current_page-1,
|
||||||
|
Reference in New Issue
Block a user