mirror of https://github.com/jumpserver/jumpserver
修改很多内容
parent
ad2a4d2d5d
commit
fc007e96d7
|
@ -2,14 +2,17 @@
|
||||||
import django
|
import django
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import random
|
||||||
|
import datetime
|
||||||
|
|
||||||
sys.path.append('../')
|
sys.path.append('../')
|
||||||
os.environ['DJANGO_SETTINGS_MODULE'] = 'jumpserver.settings'
|
os.environ['DJANGO_SETTINGS_MODULE'] = 'jumpserver.settings'
|
||||||
django.setup()
|
django.setup()
|
||||||
|
|
||||||
from juser.views import db_add_user, md5_crypt, CRYPTOR
|
|
||||||
|
from juser.views import db_add_user, md5_crypt, CRYPTOR, db_add_group
|
||||||
from jasset.models import Asset, IDC, BisGroup
|
from jasset.models import Asset, IDC, BisGroup
|
||||||
from juser.models import UserGroup
|
from juser.models import UserGroup, DEPT
|
||||||
from jasset.views import jasset_group_add
|
from jasset.views import jasset_group_add
|
||||||
from jperm.models import CmdGroup
|
from jperm.models import CmdGroup
|
||||||
|
|
||||||
|
@ -29,15 +32,18 @@ def test_add_asset_group():
|
||||||
print 'Add: %s' % name
|
print 'Add: %s' % name
|
||||||
|
|
||||||
|
|
||||||
def test_add_user_group():
|
def test_add_dept():
|
||||||
for i in range(1, 20):
|
for i in range(1, 100):
|
||||||
name = 'DepartGroup' + str(i)
|
name = 'DEPT' + str(i)
|
||||||
UserGroup.objects.create(name=name, type='M', comment=name)
|
print "Add: %s" % name
|
||||||
print 'Add: %s' % name
|
DEPT.objects.create(name=name, comment=name)
|
||||||
|
|
||||||
for i in range(1, 20):
|
|
||||||
|
def test_add_group():
|
||||||
|
dept_all = DEPT.objects.all()
|
||||||
|
for i in range(1, 100):
|
||||||
name = 'UserGroup' + str(i)
|
name = 'UserGroup' + str(i)
|
||||||
UserGroup.objects.create(name=name, type='A', comment=name)
|
UserGroup.objects.create(name=name, dept=random.choice(dept_all), comment=name)
|
||||||
print 'Add: %s' % name
|
print 'Add: %s' % name
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,15 +58,18 @@ def test_add_cmd_group():
|
||||||
def test_add_user():
|
def test_add_user():
|
||||||
for i in range(1, 500):
|
for i in range(1, 500):
|
||||||
username = "test" + str(i)
|
username = "test" + str(i)
|
||||||
|
dept_all = DEPT.objects.all()
|
||||||
|
group_all = UserGroup.objects.all()
|
||||||
|
group_all_id = [group.id for group in group_all]
|
||||||
db_add_user(username=username,
|
db_add_user(username=username,
|
||||||
password=md5_crypt(username),
|
password=md5_crypt(username),
|
||||||
|
dept=random.choice(dept_all),
|
||||||
name=username, email='%s@jumpserver.org' % username,
|
name=username, email='%s@jumpserver.org' % username,
|
||||||
groups=[1,3], role='CU',
|
groups=[random.choice(group_all_id) for i in range(1, 4)], role='CU',
|
||||||
ssh_pwd=CRYPTOR.encrypt(username),
|
|
||||||
ssh_key_pwd=CRYPTOR.encrypt(username),
|
ssh_key_pwd=CRYPTOR.encrypt(username),
|
||||||
ldap_pwd=CRYPTOR.encrypt(username),
|
ldap_pwd=CRYPTOR.encrypt(username),
|
||||||
is_active=True,
|
is_active=True,
|
||||||
date_joined=0)
|
date_joined=datetime.datetime.now())
|
||||||
print "Add: %s" % username
|
print "Add: %s" % username
|
||||||
|
|
||||||
|
|
||||||
|
@ -73,11 +82,8 @@ def test_add_asset():
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
test_add_idc()
|
#test_add_dept()
|
||||||
test_add_asset_group()
|
#test_add_group()
|
||||||
test_add_user_group()
|
|
||||||
test_add_cmd_group()
|
|
||||||
test_add_asset()
|
|
||||||
test_add_user()
|
test_add_user()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import re
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from django import template
|
from django import template
|
||||||
from juser.models import User, UserGroup
|
from juser.models import User, UserGroup, DEPT
|
||||||
from jasset.models import BisGroup
|
from jasset.models import BisGroup
|
||||||
from jumpserver.views import perm_user_asset
|
from jumpserver.views import perm_user_asset
|
||||||
|
|
||||||
|
@ -26,16 +26,16 @@ def int2str(value):
|
||||||
|
|
||||||
@register.filter(name='get_role')
|
@register.filter(name='get_role')
|
||||||
def get_role(user_id):
|
def get_role(user_id):
|
||||||
user_role = {'SU': u'瓒呯骇绠$悊鍛', 'GA': u'缁绠$悊鍛', 'CU': u'鏅氱敤鎴'}
|
user_role = {'SU': u'瓒呯骇绠$悊鍛', 'DA': u'閮ㄩ棬绠$悊鍛', 'CU': u'鏅氱敤鎴'}
|
||||||
user = User.objects.get(id=user_id)
|
user = User.objects.get(id=user_id)
|
||||||
return user_role.get(str(user.role))
|
return user_role.get(str(user.role))
|
||||||
|
|
||||||
|
|
||||||
@register.filter(name='groups_str')
|
@register.filter(name='groups_str')
|
||||||
def groups_str(username):
|
def groups_str(user_id):
|
||||||
groups = []
|
groups = []
|
||||||
user = User.objects.get(username=username)
|
user = User.objects.get(id=user_id)
|
||||||
for group in user.user_group.filter(type='A'):
|
for group in user.group.all():
|
||||||
groups.append(group.name)
|
groups.append(group.name)
|
||||||
if len(groups) < 4:
|
if len(groups) < 4:
|
||||||
return ' '.join(groups)
|
return ' '.join(groups)
|
||||||
|
@ -71,6 +71,15 @@ def member_count(group_id):
|
||||||
group = UserGroup.objects.get(id=group_id)
|
group = UserGroup.objects.get(id=group_id)
|
||||||
return group.user_set.count()
|
return group.user_set.count()
|
||||||
|
|
||||||
|
@register.filter(name='dept_member')
|
||||||
|
def dept_member(dept_id):
|
||||||
|
dept = DEPT.objects.filter(id=dept_id)
|
||||||
|
if dept:
|
||||||
|
dept = dept[0]
|
||||||
|
return dept.user_set.count()
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
@register.filter(name='perm_count')
|
@register.filter(name='perm_count')
|
||||||
def perm_count(group_id):
|
def perm_count(group_id):
|
||||||
|
|
|
@ -13,6 +13,8 @@ urlpatterns = patterns('juser.views',
|
||||||
(r'^group_list/$', 'group_list'),
|
(r'^group_list/$', 'group_list'),
|
||||||
(r'^dept_list/$', 'dept_list'),
|
(r'^dept_list/$', 'dept_list'),
|
||||||
(r'^dept_add/$', 'dept_add'),
|
(r'^dept_add/$', 'dept_add'),
|
||||||
|
(r'^dept_del/$', 'dept_del'),
|
||||||
|
(r'^dept_detail/$', 'dept_detail'),
|
||||||
(r'^user_detail/$', 'user_detail'),
|
(r'^user_detail/$', 'user_detail'),
|
||||||
(r'^user_del/$', 'user_del'),
|
(r'^user_del/$', 'user_del'),
|
||||||
(r'^user_edit/$', 'user_edit'),
|
(r'^user_edit/$', 'user_edit'),
|
||||||
|
|
223
juser/views.py
223
juser/views.py
|
@ -62,15 +62,7 @@ def gen_sha512(salt, password):
|
||||||
return crypt.crypt(password, '$6$%s$' % salt)
|
return crypt.crypt(password, '$6$%s$' % salt)
|
||||||
|
|
||||||
|
|
||||||
def db_add_group(**kwargs):
|
def group_add_user(group, user_id=None, username=None):
|
||||||
name = kwargs.get('name')
|
|
||||||
group = UserGroup.objects.filter(name=name)
|
|
||||||
if group:
|
|
||||||
raise AddError(u'鐢ㄦ埛缁 %s 宸茬粡瀛樺湪' % name)
|
|
||||||
UserGroup(**kwargs).save()
|
|
||||||
|
|
||||||
|
|
||||||
def group_add_user(group_name, user_id=None, username=None):
|
|
||||||
try:
|
try:
|
||||||
if user_id:
|
if user_id:
|
||||||
user = User.objects.get(id=user_id)
|
user = User.objects.get(id=user_id)
|
||||||
|
@ -79,10 +71,24 @@ def group_add_user(group_name, user_id=None, username=None):
|
||||||
except ObjectDoesNotExist:
|
except ObjectDoesNotExist:
|
||||||
raise AddError('鐢ㄦ埛鑾峰彇澶辫触')
|
raise AddError('鐢ㄦ埛鑾峰彇澶辫触')
|
||||||
else:
|
else:
|
||||||
group = UserGroup.objects.get(name=group_name)
|
|
||||||
group.user_set.add(user)
|
group.user_set.add(user)
|
||||||
|
|
||||||
|
|
||||||
|
def db_add_group(**kwargs):
|
||||||
|
name = kwargs.get('name')
|
||||||
|
group = UserGroup.objects.filter(name=name)
|
||||||
|
users = kwargs.pop('users')
|
||||||
|
if group:
|
||||||
|
raise AddError(u'鐢ㄦ埛缁 %s 宸茬粡瀛樺湪' % name)
|
||||||
|
group = UserGroup(**kwargs)
|
||||||
|
group.save()
|
||||||
|
for user_id in users:
|
||||||
|
group_add_user(group, user_id)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def group_update_user(group_id, users_id):
|
def group_update_user(group_id, users_id):
|
||||||
group = UserGroup.objects.get(id=group_id)
|
group = UserGroup.objects.get(id=group_id)
|
||||||
group.user_set.clear()
|
group.user_set.clear()
|
||||||
|
@ -109,12 +115,14 @@ def db_update_user(**kwargs):
|
||||||
user = User.objects.filter(username=username)
|
user = User.objects.filter(username=username)
|
||||||
user.update(**kwargs)
|
user.update(**kwargs)
|
||||||
user = User.objects.get(username=username)
|
user = User.objects.get(username=username)
|
||||||
group_select = []
|
|
||||||
for group_id in groups_post:
|
|
||||||
group = UserGroup.objects.filter(id=group_id)
|
|
||||||
group_select.extend(group)
|
|
||||||
user.save()
|
user.save()
|
||||||
user.user_group = group_select
|
|
||||||
|
if groups_post:
|
||||||
|
group_select = []
|
||||||
|
for group_id in groups_post:
|
||||||
|
group = UserGroup.objects.filter(id=group_id)
|
||||||
|
group_select.extend(group)
|
||||||
|
user.user_group = group_select
|
||||||
|
|
||||||
|
|
||||||
def db_del_user(username):
|
def db_del_user(username):
|
||||||
|
@ -249,7 +257,11 @@ def dept_add(request):
|
||||||
|
|
||||||
def dept_list(request):
|
def dept_list(request):
|
||||||
header_title, path1, path2 = '鏌ョ湅閮ㄩ棬', '鐢ㄦ埛绠$悊', '鏌ョ湅閮ㄩ棬'
|
header_title, path1, path2 = '鏌ョ湅閮ㄩ棬', '鐢ㄦ埛绠$悊', '鏌ョ湅閮ㄩ棬'
|
||||||
contact_list = DEPT.objects.all()
|
keyword = request.GET.get('search')
|
||||||
|
if keyword:
|
||||||
|
contact_list = DEPT.objects.filter(Q(name__icontains=keyword) | Q(comment__icontains=keyword)).order_by('name')
|
||||||
|
else:
|
||||||
|
contact_list = DEPT.objects.all()
|
||||||
p = paginator = Paginator(contact_list, 10)
|
p = paginator = Paginator(contact_list, 10)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -266,10 +278,32 @@ def dept_list(request):
|
||||||
return render_to_response('juser/dept_list.html', locals(), context_instance=RequestContext(request))
|
return render_to_response('juser/dept_list.html', locals(), context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
|
||||||
def group_add(request, group_type_select='A'):
|
def dept_detail(request):
|
||||||
|
dept_id = request.GET.get('id', None)
|
||||||
|
if not dept_id:
|
||||||
|
return HttpResponseRedirect('/juser/dept_list/')
|
||||||
|
dept = DEPT.objects.filter(id=dept_id)
|
||||||
|
if dept:
|
||||||
|
dept = dept[0]
|
||||||
|
users = dept.user_set.all()
|
||||||
|
return render_to_response('juser/dept_detail.html', locals(), context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
|
||||||
|
def dept_del(request):
|
||||||
|
dept_id = request.GET.get('id', None)
|
||||||
|
if not dept_id:
|
||||||
|
return HttpResponseRedirect('/juser/dept_list/')
|
||||||
|
dept = DEPT.objects.filter(id=dept_id)
|
||||||
|
if dept:
|
||||||
|
dept = dept[0]
|
||||||
|
dept.delete()
|
||||||
|
return HttpResponseRedirect('/juser/dept_list/')
|
||||||
|
|
||||||
|
|
||||||
|
def group_add(request):
|
||||||
error = ''
|
error = ''
|
||||||
msg = ''
|
msg = ''
|
||||||
header_title, path1, path2 = '娣诲姞灞炵粍', '鐢ㄦ埛绠$悊', '娣诲姞鐢ㄦ埛缁'
|
header_title, path1, path2 = '娣诲姞灏缁', '鐢ㄦ埛绠$悊', '娣诲姞灏缁'
|
||||||
user_all = User.objects.all()
|
user_all = User.objects.all()
|
||||||
dept_all = DEPT.objects.all()
|
dept_all = DEPT.objects.all()
|
||||||
|
|
||||||
|
@ -290,7 +324,7 @@ def group_add(request, group_type_select='A'):
|
||||||
else:
|
else:
|
||||||
AddError(u'閮ㄩ棬涓嶅瓨鍦')
|
AddError(u'閮ㄩ棬涓嶅瓨鍦')
|
||||||
|
|
||||||
db_add_group(name=group_name, dept=dept, comment=comment)
|
db_add_group(name=group_name, users=users_selected, dept=dept, comment=comment)
|
||||||
except AddError:
|
except AddError:
|
||||||
pass
|
pass
|
||||||
except TypeError:
|
except TypeError:
|
||||||
|
@ -302,8 +336,12 @@ def group_add(request, group_type_select='A'):
|
||||||
|
|
||||||
|
|
||||||
def group_list(request):
|
def group_list(request):
|
||||||
header_title, path1, path2 = '鏌ョ湅灞炵粍 | Show Group', '鐢ㄦ埛绠$悊', '鏌ョ湅鐢ㄦ埛缁'
|
header_title, path1, path2 = '鏌ョ湅灏忕粍', '鐢ㄦ埛绠$悊', '鏌ョ湅灏忕粍'
|
||||||
contact_list = UserGroup.objects.all()
|
keyword = request.GET.get('search', '')
|
||||||
|
if keyword:
|
||||||
|
contact_list = UserGroup.objects.filter(Q(name__icontains=keyword) | Q(comment__icontains=keyword))
|
||||||
|
else:
|
||||||
|
contact_list = UserGroup.objects.all().order_by('name')
|
||||||
p = paginator = Paginator(contact_list, 10)
|
p = paginator = Paginator(contact_list, 10)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -370,10 +408,80 @@ def group_edit(request):
|
||||||
return HttpResponseRedirect('/juser/group_list/')
|
return HttpResponseRedirect('/juser/group_list/')
|
||||||
|
|
||||||
|
|
||||||
|
def user_add(request):
|
||||||
|
error = ''
|
||||||
|
msg = ''
|
||||||
|
header_title, path1, path2 = '娣诲姞鐢ㄦ埛 | User Add', '鐢ㄦ埛绠$悊', '娣诲姞鐢ㄦ埛'
|
||||||
|
user_role = {'SU': u'瓒呯骇绠$悊鍛', 'DA': u'閮ㄩ棬绠$悊鍛', 'CU': u'鏅氱敤鎴'}
|
||||||
|
dept_all = DEPT.objects.all()
|
||||||
|
group_all = UserGroup.objects.all()
|
||||||
|
|
||||||
|
if request.method == 'POST':
|
||||||
|
username = request.POST.get('username', '')
|
||||||
|
password = request.POST.get('password', '')
|
||||||
|
name = request.POST.get('name', '')
|
||||||
|
email = request.POST.get('email', '')
|
||||||
|
dept_id = request.POST.get('dept_id')
|
||||||
|
groups = request.POST.getlist('groups', [])
|
||||||
|
role_post = request.POST.get('role', 'CU')
|
||||||
|
ssh_key_pwd = request.POST.get('ssh_key_pwd', '')
|
||||||
|
is_active = request.POST.get('is_active', '1')
|
||||||
|
ldap_pwd = gen_rand_pwd(16)
|
||||||
|
|
||||||
|
try:
|
||||||
|
if None in [username, password, ssh_key_pwd, name, groups, role_post, is_active]:
|
||||||
|
error = u'甯*鍐呭涓嶈兘涓虹┖'
|
||||||
|
raise AddError
|
||||||
|
user = User.objects.filter(username=username)
|
||||||
|
if user:
|
||||||
|
error = u'鐢ㄦ埛 %s 宸插瓨鍦' % username
|
||||||
|
raise AddError
|
||||||
|
|
||||||
|
dept = DEPT.objects.filter(id=dept_id)
|
||||||
|
if dept:
|
||||||
|
dept = dept[0]
|
||||||
|
else:
|
||||||
|
error = u'閮ㄩ棬涓嶅瓨鍦'
|
||||||
|
raise AddError(error)
|
||||||
|
|
||||||
|
except AddError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
db_add_user(username=username,
|
||||||
|
password=md5_crypt(password),
|
||||||
|
name=name, email=email, dept=dept,
|
||||||
|
groups=groups, role=role_post,
|
||||||
|
ssh_key_pwd=CRYPTOR.encrypt(ssh_key_pwd),
|
||||||
|
ldap_pwd=CRYPTOR.encrypt(ldap_pwd),
|
||||||
|
is_active=is_active,
|
||||||
|
date_joined=datetime.datetime.now())
|
||||||
|
|
||||||
|
server_add_user(username, password, ssh_key_pwd)
|
||||||
|
if LDAP_ENABLE:
|
||||||
|
ldap_add_user(username, ldap_pwd)
|
||||||
|
msg = u'娣诲姞鐢ㄦ埛 %s 鎴愬姛锛' % username
|
||||||
|
|
||||||
|
except Exception, e:
|
||||||
|
error = u'娣诲姞鐢ㄦ埛 %s 澶辫触 %s ' % (username, e)
|
||||||
|
try:
|
||||||
|
db_del_user(username)
|
||||||
|
server_del_user(username)
|
||||||
|
if LDAP_ENABLE:
|
||||||
|
ldap_del_user(username)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
return render_to_response('juser/user_add.html', locals(), context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
|
||||||
def user_list(request):
|
def user_list(request):
|
||||||
user_role = {'SU': u'瓒呯骇绠$悊鍛', 'GA': u'缁勭鐞嗗憳', 'CU': u'鏅氱敤鎴'}
|
user_role = {'SU': u'瓒呯骇绠$悊鍛', 'GA': u'缁勭鐞嗗憳', 'CU': u'鏅氱敤鎴'}
|
||||||
header_title, path1, path2 = '鏌ョ湅鐢ㄦ埛 | Show User', '鐢ㄦ埛绠$悊', '鐢ㄦ埛鍒楄〃'
|
header_title, path1, path2 = '鏌ョ湅鐢ㄦ埛', '鐢ㄦ埛绠$悊', '鐢ㄦ埛鍒楄〃'
|
||||||
users = contact_list = User.objects.all().order_by('id')
|
keyword = request.GET.get('search', '')
|
||||||
|
if keyword:
|
||||||
|
contact_list = User.objects.filter(Q(username__icontains=keyword) | Q(name__icontains=keyword)).order_by('name')
|
||||||
|
else:
|
||||||
|
contact_list = User.objects.all().order_by('id')
|
||||||
p = paginator = Paginator(contact_list, 10)
|
p = paginator = Paginator(contact_list, 10)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -479,72 +587,6 @@ def user_edit(request):
|
||||||
return render_to_response('juser/user_add.html', locals(), context_instance=RequestContext(request))
|
return render_to_response('juser/user_add.html', locals(), context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
|
||||||
def user_add(request):
|
|
||||||
error = ''
|
|
||||||
msg = ''
|
|
||||||
header_title, path1, path2 = '娣诲姞鐢ㄦ埛 | User Add', '鐢ㄦ埛绠$悊', '娣诲姞鐢ㄦ埛'
|
|
||||||
user_role = {'SU': u'瓒呯骇绠$悊鍛', 'DA': u'閮ㄩ棬绠$悊鍛', 'CU': u'鏅氱敤鎴'}
|
|
||||||
dept_all = DEPT.objects.all()
|
|
||||||
group_all = UserGroup.objects.all()
|
|
||||||
|
|
||||||
if request.method == 'POST':
|
|
||||||
username = request.POST.get('username', '')
|
|
||||||
password = request.POST.get('password', '')
|
|
||||||
name = request.POST.get('name', '')
|
|
||||||
email = request.POST.get('email', '')
|
|
||||||
dept_id = request.POST.get('dept_id')
|
|
||||||
groups = request.POST.getlist('groups', [])
|
|
||||||
role_post = request.POST.get('role', 'CU')
|
|
||||||
ssh_key_pwd = request.POST.get('ssh_key_pwd', '')
|
|
||||||
is_active = request.POST.get('is_active', '1')
|
|
||||||
ldap_pwd = gen_rand_pwd(16)
|
|
||||||
|
|
||||||
try:
|
|
||||||
if None in [username, password, ssh_key_pwd, name, groups, role_post, is_active]:
|
|
||||||
error = u'甯*鍐呭涓嶈兘涓虹┖'
|
|
||||||
raise AddError
|
|
||||||
user = User.objects.filter(username=username)
|
|
||||||
if user:
|
|
||||||
error = u'鐢ㄦ埛 %s 宸插瓨鍦' % username
|
|
||||||
raise AddError
|
|
||||||
|
|
||||||
dept = DEPT.objects.filter(id=dept_id)
|
|
||||||
if dept:
|
|
||||||
dept = dept[0]
|
|
||||||
else:
|
|
||||||
error = u'閮ㄩ棬涓嶅瓨鍦'
|
|
||||||
raise AddError(error)
|
|
||||||
|
|
||||||
except AddError:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
db_add_user(username=username,
|
|
||||||
password=md5_crypt(password),
|
|
||||||
name=name, email=email, dept=dept,
|
|
||||||
groups=groups, role=role_post,
|
|
||||||
ssh_key_pwd=CRYPTOR.encrypt(ssh_key_pwd),
|
|
||||||
ldap_pwd=CRYPTOR.encrypt(ldap_pwd),
|
|
||||||
is_active=is_active,
|
|
||||||
date_joined=datetime.datetime.now())
|
|
||||||
|
|
||||||
server_add_user(username, password, ssh_key_pwd)
|
|
||||||
if LDAP_ENABLE:
|
|
||||||
ldap_add_user(username, ldap_pwd)
|
|
||||||
msg = u'娣诲姞鐢ㄦ埛 %s 鎴愬姛锛' % username
|
|
||||||
|
|
||||||
except Exception, e:
|
|
||||||
error = u'娣诲姞鐢ㄦ埛 %s 澶辫触 %s ' % (username, e)
|
|
||||||
try:
|
|
||||||
db_del_user(username)
|
|
||||||
server_del_user(username)
|
|
||||||
if LDAP_ENABLE:
|
|
||||||
ldap_del_user(username)
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
return render_to_response('juser/user_add.html', locals(), context_instance=RequestContext(request))
|
|
||||||
|
|
||||||
|
|
||||||
def profile(request):
|
def profile(request):
|
||||||
user_id = request.session.get('user_id')
|
user_id = request.session.get('user_id')
|
||||||
if not user_id:
|
if not user_id:
|
||||||
|
@ -558,6 +600,3 @@ def chg_pass(request):
|
||||||
|
|
||||||
return render_to_response('juser/user_add.html', locals(), context_instance=RequestContext(request))
|
return render_to_response('juser/user_add.html', locals(), context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
{% load mytags %}
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
{% include 'link_css.html' %}
|
||||||
|
|
||||||
|
<style type="text/css">
|
||||||
|
body
|
||||||
|
{
|
||||||
|
background: #FFFFFF;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="row">
|
||||||
|
<div class="contact-box">
|
||||||
|
<h2 class="text-center"><b>{{ dept.name }}</b> 閮ㄩ棬鎴愬憳</h2>
|
||||||
|
<div class="ibox-content">
|
||||||
|
<table class="table table-striped table-bordered table-hover " id="editable" >
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="text-center">鐢ㄦ埛鍚</th>
|
||||||
|
<th class="text-center">濮撳悕</th>
|
||||||
|
<th class="text-center">瑙掕壊</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for user in users %}
|
||||||
|
<tr class="gradeX">
|
||||||
|
<td class="text-center">{{ user.username }}</td>
|
||||||
|
<td class="text-center">{{ user.name }}</td>
|
||||||
|
<td class="text-center">{{ user.id|get_role }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</tbody>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -31,11 +31,25 @@
|
||||||
<div class="ibox-content">
|
<div class="ibox-content">
|
||||||
<div class="">
|
<div class="">
|
||||||
<a target="_blank" href="/juser/dept_add/" class="btn btn-sm btn-primary "> 娣诲姞 </a>
|
<a target="_blank" href="/juser/dept_add/" class="btn btn-sm btn-primary "> 娣诲姞 </a>
|
||||||
|
<a target="_blank" href="/juser/group_add/" class="btn btn-sm btn-danger "> 鍒犻櫎鎵閫 </a>
|
||||||
|
<form id="search_form" method="get" action="" class="pull-right mail-search">
|
||||||
|
<div class="input-group">
|
||||||
|
<input type="text" class="form-control input-sm" id="search_input" name="search" placeholder="Search">
|
||||||
|
<div class="input-group-btn">
|
||||||
|
<button id='search_btn' type="submit" class="btn btn-sm btn-primary">
|
||||||
|
Search
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<table class="table table-striped table-bordered table-hover " id="editable" >
|
<table class="table table-striped table-bordered table-hover " id="editable" >
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
<th class="text-center">
|
||||||
|
<input type="checkbox" id="select_all" onclick="selectAll()" name="select_all">
|
||||||
|
</th>
|
||||||
<th class="text-center">閮ㄩ棬鍚嶇О</th>
|
<th class="text-center">閮ㄩ棬鍚嶇О</th>
|
||||||
<th class="text-center">鎴愬憳鏁伴噺</th>
|
<th class="text-center">鎴愬憳鏁伴噺</th>
|
||||||
<th class="text-center">澶囨敞</th>
|
<th class="text-center">澶囨敞</th>
|
||||||
|
@ -45,13 +59,16 @@
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for dept in contacts.object_list %}
|
{% for dept in contacts.object_list %}
|
||||||
<tr class="gradeX">
|
<tr class="gradeX">
|
||||||
|
<td class="text-center">
|
||||||
|
<input type="checkbox" name="selected" value="{{ dept.id }}">
|
||||||
|
</td>
|
||||||
<td class="text-center"> {{ dept.name }} </td>
|
<td class="text-center"> {{ dept.name }} </td>
|
||||||
<td class="text-center"> {{ dept.name }} </td>
|
<td class="text-center"> {{ dept.id | dept_member }} </td>
|
||||||
<td class="text-center"> {{ dept.comment }} </td>
|
<td class="text-center"> {{ dept.comment }} </td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
<a title="[ {{ dept.name }} ] 鎴愬憳淇℃伅" href="../dept_detail/?id={{ group.id }}" class="iframe btn btn-xs btn-primary">鎴愬憳</a>
|
<a title="[ {{ dept.name }} ] 鎴愬憳淇℃伅" href="../dept_detail/?id={{ dept.id }}" class="iframe btn btn-xs btn-primary">鎴愬憳</a>
|
||||||
<a href="../dept_edit/?id={{ group.id }}" class="btn btn-xs btn-info">缂栬緫</a>
|
<a href="../dept_edit/?id={{ dept.id }}" class="btn btn-xs btn-info">缂栬緫</a>
|
||||||
<a href="../dept_del/?id={{ group.id }}" class="btn btn-xs btn-danger">鍒犻櫎</a>
|
<a href="../dept_del/?id={{ dept.id }}" class="btn btn-xs btn-danger">鍒犻櫎</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -75,8 +92,8 @@
|
||||||
<a href="#">Previous</a>
|
<a href="#">Previous</a>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% for page in p.page_range %}
|
{% for page in page_range %}
|
||||||
{% ifequal offset1 page %}
|
{% ifequal current_page page %}
|
||||||
<li class="paginate_button active" aria-controls="editable" tabindex="0"><a href="?page={{ page }}" title="绗瑊{ page }}椤">{{ page }}</a></li>
|
<li class="paginate_button active" aria-controls="editable" tabindex="0"><a href="?page={{ page }}" title="绗瑊{ page }}椤">{{ page }}</a></li>
|
||||||
{% else %}
|
{% else %}
|
||||||
<li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?page={{ page }}" title="绗瑊{ page }}椤">{{ page }}</a></li>
|
<li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?page={{ page }}" title="绗瑊{ page }}椤">{{ page }}</a></li>
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
<body>
|
<body>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="contact-box">
|
<div class="contact-box">
|
||||||
<h2 class="text-center">{{ group.name }} 灞炵粍璇︽儏</h2>
|
<h2 class="text-center"><b>{{ group.name }}</b> 缁勪腑鎴愬憳</h2>
|
||||||
<div class="ibox-content">
|
<div class="ibox-content">
|
||||||
|
|
||||||
<table class="table table-striped table-bordered table-hover " id="editable" >
|
<table class="table table-striped table-bordered table-hover " id="editable" >
|
||||||
|
|
|
@ -31,11 +31,26 @@
|
||||||
<div class="ibox-content">
|
<div class="ibox-content">
|
||||||
<div class="">
|
<div class="">
|
||||||
<a target="_blank" href="/juser/group_add/" class="btn btn-sm btn-primary "> 娣诲姞 </a>
|
<a target="_blank" href="/juser/group_add/" class="btn btn-sm btn-primary "> 娣诲姞 </a>
|
||||||
|
|
||||||
|
<a target="_blank" href="/juser/group_add/" class="btn btn-sm btn-danger "> 鍒犻櫎鎵閫 </a>
|
||||||
|
<form id="search_form" method="get" action="" class="pull-right mail-search">
|
||||||
|
<div class="input-group">
|
||||||
|
<input type="text" class="form-control input-sm" id="search_input" name="search" placeholder="Search">
|
||||||
|
<div class="input-group-btn">
|
||||||
|
<button id='search_btn' type="submit" class="btn btn-sm btn-primary">
|
||||||
|
Search
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<table class="table table-striped table-bordered table-hover " id="editable" >
|
<table class="table table-striped table-bordered table-hover " id="editable" >
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
<th class="text-center">
|
||||||
|
<input type="checkbox" id="select_all" onclick="selectAll()" name="select_all">
|
||||||
|
</th>
|
||||||
<th class="text-center">缁勫悕</th>
|
<th class="text-center">缁勫悕</th>
|
||||||
<th class="text-center">鎵灞為儴闂</th>
|
<th class="text-center">鎵灞為儴闂</th>
|
||||||
<th class="text-center">鎴愬憳鏁伴噺</th>
|
<th class="text-center">鎴愬憳鏁伴噺</th>
|
||||||
|
@ -46,9 +61,12 @@
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for group in contacts.object_list %}
|
{% for group in contacts.object_list %}
|
||||||
<tr class="gradeX">
|
<tr class="gradeX">
|
||||||
|
<td class="text-center">
|
||||||
|
<input type="checkbox" name="selected" value="{{ group.id }}">
|
||||||
|
</td>
|
||||||
<td class="text-center"> {{ group.name }} </td>
|
<td class="text-center"> {{ group.name }} </td>
|
||||||
<td class="text-center"> {{ group.dept.name }} </td>
|
<td class="text-center"> {{ group.dept.name }} </td>
|
||||||
<td class="text-center"> {{ group.name }} </td>
|
<td class="text-center"> {{ group.id | member_count }} </td>
|
||||||
<td class="text-center"> {{ group.comment }} </td>
|
<td class="text-center"> {{ group.comment }} </td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
<a title="[ {{ group.name }} ] 鎴愬憳淇℃伅" href="../group_detail/?id={{ group.id }}" class="iframe btn btn-xs btn-primary">鎴愬憳</a>
|
<a title="[ {{ group.name }} ] 鎴愬憳淇℃伅" href="../group_detail/?id={{ group.id }}" class="iframe btn btn-xs btn-primary">鎴愬憳</a>
|
||||||
|
@ -77,8 +95,8 @@
|
||||||
<a href="#">Previous</a>
|
<a href="#">Previous</a>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% for page in p.page_range %}
|
{% for page in page_range %}
|
||||||
{% ifequal offset1 page %}
|
{% ifequal current_page page %}
|
||||||
<li class="paginate_button active" aria-controls="editable" tabindex="0"><a href="?page={{ page }}" title="绗瑊{ page }}椤">{{ page }}</a></li>
|
<li class="paginate_button active" aria-controls="editable" tabindex="0"><a href="?page={{ page }}" title="绗瑊{ page }}椤">{{ page }}</a></li>
|
||||||
{% else %}
|
{% else %}
|
||||||
<li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?page={{ page }}" title="绗瑊{ page }}椤">{{ page }}</a></li>
|
<li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?page={{ page }}" title="绗瑊{ page }}椤">{{ page }}</a></li>
|
||||||
|
@ -107,6 +125,17 @@
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
$(".iframe").colorbox({iframe:true, width:"70%", height:"70%"});
|
$(".iframe").colorbox({iframe:true, width:"70%", height:"70%"});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
{# function user_group_search(){#}
|
||||||
|
{# $.ajax({#}
|
||||||
|
{# type: "GET",#}
|
||||||
|
{# url: "/juser/group_search/",#}
|
||||||
|
{# data: $("#search_form").serialize(),#}
|
||||||
|
{# success: function (data) {#}
|
||||||
|
{# $("#contents_form").html(data);#}
|
||||||
|
{# }#}
|
||||||
|
{# });#}
|
||||||
|
{# }#}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -31,6 +31,17 @@
|
||||||
<div class="ibox-content">
|
<div class="ibox-content">
|
||||||
<div class="">
|
<div class="">
|
||||||
<a target="_blank" href="/juser/user_add/" class="btn btn-sm btn-primary "> 娣诲姞 </a>
|
<a target="_blank" href="/juser/user_add/" class="btn btn-sm btn-primary "> 娣诲姞 </a>
|
||||||
|
<a target="_blank" href="/juser/group_add/" class="btn btn-sm btn-danger "> 鍒犻櫎鎵閫 </a>
|
||||||
|
<form id="search_form" method="get" action="" class="pull-right mail-search">
|
||||||
|
<div class="input-group">
|
||||||
|
<input type="text" class="form-control input-sm" id="search_input" name="search" placeholder="Search">
|
||||||
|
<div class="input-group-btn">
|
||||||
|
<button id='search_btn' type="submit" class="btn btn-sm btn-primary">
|
||||||
|
Search
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<table class="table table-striped table-bordered table-hover " id="editable" >
|
<table class="table table-striped table-bordered table-hover " id="editable" >
|
||||||
|
@ -39,11 +50,10 @@
|
||||||
<th class="text-center">
|
<th class="text-center">
|
||||||
<input type="checkbox" id="select_all" onclick="selectAll()" name="select_all">
|
<input type="checkbox" id="select_all" onclick="selectAll()" name="select_all">
|
||||||
</th>
|
</th>
|
||||||
<th class="text-center">ID</th>
|
|
||||||
<th class="text-center">鐢ㄦ埛鍚</th>
|
<th class="text-center">鐢ㄦ埛鍚</th>
|
||||||
<th class="text-center">濮撳悕</th>
|
<th class="text-center">濮撳悕</th>
|
||||||
<th class="text-center">閮ㄩ棬</th>
|
<th class="text-center">閮ㄩ棬</th>
|
||||||
<th class="text-center">鐢ㄦ埛缁</th>
|
<th class="text-center">灏缁</th>
|
||||||
<th class="text-center">瑙掕壊</th>
|
<th class="text-center">瑙掕壊</th>
|
||||||
<th class="text-center">婵娲</th>
|
<th class="text-center">婵娲</th>
|
||||||
<th class="text-center">鎿嶄綔</th>
|
<th class="text-center">鎿嶄綔</th>
|
||||||
|
@ -55,12 +65,11 @@
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
<input type="checkbox" name="selected" value="{{ user.id }}">
|
<input type="checkbox" name="selected" value="{{ user.id }}">
|
||||||
</td>
|
</td>
|
||||||
<td class="text-center"> {{ user.id }} </td>
|
|
||||||
<td class="text-center"> {{ user.username }} </td>
|
<td class="text-center"> {{ user.username }} </td>
|
||||||
<td class="text-center"> {{ user.name }} </td>
|
<td class="text-center"> {{ user.name }} </td>
|
||||||
<td class="text-center"> {{ user.username|group_manage_str }} </td>
|
<td class="text-center"> {{ user.dept.name }} </td>
|
||||||
<td class="text-center"> {{ user.username|groups_str }}</td>
|
<td class="text-center"> {{ user.id | groups_str }} </td>
|
||||||
<td class="text-center">{{ user.id|get_role }}</td>
|
<td class="text-center"> {{ user.id | get_role }}</td>
|
||||||
<td class="text-center">{{ user.is_active|bool2str }}</td>
|
<td class="text-center">{{ user.is_active|bool2str }}</td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
<a title="[ {{ user.name }} ] 璇︽儏" href="../user_detail/?id={{ user.id }}" class="iframe btn btn-xs btn-primary">璇︽儏</a>
|
<a title="[ {{ user.name }} ] 璇︽儏" href="../user_detail/?id={{ user.id }}" class="iframe btn btn-xs btn-primary">璇︽儏</a>
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
<nav class="navbar navbar-static-top" role="navigation" style="margin-bottom: 0">
|
<nav class="navbar navbar-static-top" role="navigation" style="margin-bottom: 0">
|
||||||
<div class="navbar-header">
|
<div class="navbar-header">
|
||||||
<a class="navbar-minimalize minimalize-styl-2 btn btn-primary " href="#"><i class="fa fa-bars"></i> </a>
|
<a class="navbar-minimalize minimalize-styl-2 btn btn-primary " href="#"><i class="fa fa-bars"></i> </a>
|
||||||
<form role="search" class="navbar-form-custom" method="post" action="search_results.html">
|
<form role="search" class="navbar-form-custom" method="get" action="">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input type="text" placeholder="杈撳叆鎼滅储..." class="form-control" name="top-search" id="top-search">
|
<input type="text" placeholder="杈撳叆鎼滅储..." class="form-control" name="search" id="top-search">
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading鈥
Reference in New Issue