Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
jumpserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
jumpserver
Commits
49f00760
Commit
49f00760
authored
Sep 26, 2016
by
xiaokong1937@gmail.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add user-list-delete support for user-group detail page
parent
74cdd2d0
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
64 additions
and
11 deletions
+64
-11
api.py
apps/users/api.py
+19
-6
models.py
apps/users/models.py
+7
-4
user_group_detail.html
apps/users/templates/users/user_group_detail.html
+36
-1
urls.py
apps/users/urls.py
+2
-0
No files found.
apps/users/api.py
View file @
49f00760
...
...
@@ -3,7 +3,10 @@
import
logging
from
rest_framework
import
generics
from
django.shortcuts
import
get_object_or_404
from
rest_framework
import
generics
,
status
from
rest_framework.response
import
Response
from
rest_framework_bulk
import
ListBulkCreateUpdateDestroyAPIView
from
.serializers
import
UserSerializer
,
UserGroupSerializer
,
UserAttributeSerializer
,
UserGroupEditSerializer
,
\
...
...
@@ -27,11 +30,6 @@ class UserDetailDeleteUpdateApi(generics.RetrieveUpdateDestroyAPIView):
print
(
self
.
request
.
data
)
return
super
(
UserDetailDeleteUpdateApi
,
self
)
.
delete
(
request
,
*
args
,
**
kwargs
)
# def get(self, request, *args, **kwargs):
# print("hello world")
# print(request.user)
# return super(UserDetailDeleteUpdateApi, self).get(request, *args, **kwargs)
class
UserGroupListAddApi
(
generics
.
ListCreateAPIView
):
queryset
=
UserGroup
.
objects
.
all
()
...
...
@@ -111,3 +109,18 @@ class UserBulkUpdateApi(ListBulkCreateUpdateDestroyAPIView):
if
isinstance
(
ids
,
list
):
queryset
=
queryset
.
filter
(
id__in
=
ids
)
return
queryset
class
DeleteUserFromGroupApi
(
generics
.
DestroyAPIView
):
queryset
=
UserGroup
.
objects
.
all
()
serializer_class
=
GroupEditSerializer
def
destroy
(
self
,
request
,
*
args
,
**
kwargs
):
group
=
self
.
get_object
()
self
.
perform_destroy
(
group
,
**
kwargs
)
return
Response
(
status
=
status
.
HTTP_204_NO_CONTENT
)
def
perform_destroy
(
self
,
instance
,
**
kwargs
):
user_id
=
kwargs
.
get
(
'uid'
)
user
=
get_object_or_404
(
User
,
id
=
user_id
)
instance
.
users
.
remove
(
user
)
apps/users/models.py
View file @
49f00760
...
...
@@ -4,14 +4,14 @@ from __future__ import unicode_literals
from
django.conf
import
settings
from
django.contrib.auth.hashers
import
make_password
from
django.utils
import
timezone
from
django.db
import
models
from
django.contrib.auth.models
import
AbstractUser
from
django.core
import
signing
from
django.db
import
models
,
IntegrityError
from
django.db.models.signals
import
post_save
from
django.dispatch
import
receiver
from
django.db
import
IntegrityError
from
django.utils.translation
import
ugettext_lazy
as
_
from
django.core
import
signing
from
django.utils
import
timezone
from
django.shortcuts
import
reverse
from
rest_framework.authtoken.models
import
Token
...
...
@@ -102,6 +102,9 @@ class User(AbstractUser):
def
password_raw
(
self
,
password_raw_
):
self
.
set_password
(
password_raw_
)
def
get_absolute_url
(
self
):
return
reverse
(
'users:user-detail'
,
args
=
(
self
.
id
,))
@property
def
is_expired
(
self
):
if
self
.
date_expired
>
timezone
.
now
():
...
...
apps/users/templates/users/user_group_detail.html
View file @
49f00760
...
...
@@ -7,6 +7,18 @@
<link
href=
"{% static "
css
/
plugins
/
sweetalert
/
sweetalert
.
css
"
%}"
rel=
"stylesheet"
>
<script
src=
"{% static "
js
/
plugins
/
select2
/
select2
.
full
.
min
.
js
"
%}"
></script>
<script
src=
"{% static "
js
/
plugins
/
sweetalert
/
sweetalert
.
min
.
js
"
%}"
></script>
<style>
.label
{
font-size
:
14px
;
line-height
:
2.5
;
}
.label
.remove
{
color
:
#fff
;
}
.label
span
{
color
:
#5e5e5e
;
}
</style>
{% endblock %}
{% block content %}
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
...
...
@@ -46,9 +58,17 @@
<td><b>
{{ object.comment }}
</b></td>
</tr>
<tr>
<td>
{% trans 'Created at
:
' %}:
</td>
<td>
{% trans 'Created at' %}:
</td>
<td><b>
{{ object.date_created }}
</b></td>
</tr>
<tr>
<td>
{% trans 'Users' %}:
</td>
<td
style=
"line-height: 2"
>
{% for user in object.users.all %}
<span
class=
"label m-l-xs"
><a
href=
"{{ user.get_absolute_url }}"
><span>
{{ user.name }}
</span></a><a
data-uid=
"{{ user.id }}"
class=
"btn_remove"
><i
class=
"remove fa fa-times-circle"
></i></a></span>
{% endfor %}
</td>
</tr>
</table>
</div>
</div>
...
...
@@ -109,3 +129,18 @@
</div>
</div>
{% endblock %}
{% block custom_foot_js %}
<script>
$
(
document
).
on
(
'click'
,
'.btn_remove'
,
function
(){
var
$this
=
$
(
this
);
var
uid
=
$this
.
data
(
'uid'
);
var
the_url
=
'{% url "users:delete-user-from-group-api" pk=object.id uid=99991937 %}'
.
replace
(
'99991937'
,
uid
);
var
success
=
function
(){
$this
.
closest
(
'.label'
).
remove
();
};
var
error
=
function
(){};
APIUpdateAttr
({
url
:
the_url
,
body
:
"{}"
,
method
:
"DELETE"
,
success
:
success
,
error
:
error
});
return
false
;
})
</script>
{% endblock %}
apps/users/urls.py
View file @
49f00760
...
...
@@ -46,6 +46,8 @@ urlpatterns += [
url
(
r'^v1/user-groups$'
,
api
.
UserGroupListAddApi
.
as_view
(),
name
=
'user-group-list-api'
),
url
(
r'^v1/user-groups/(?P<pk>[0-9]+)$'
,
api
.
UserGroupDetailDeleteUpdateApi
.
as_view
(),
name
=
'user-group-detail-api'
),
url
(
r'^v1/user-groups/group/(?P<pk>\d+)/user/(?P<uid>\d+)/$'
,
api
.
DeleteUserFromGroupApi
.
as_view
(),
name
=
'delete-user-from-group-api'
),
url
(
r'^v1/user-groups/(?P<pk>[0-9]+)/edit$'
,
api
.
UserGroupEditApi
.
as_view
(),
name
=
'user-group-edit-api'
),
url
(
r'^v1/user-groups/(?P<pk>[0-9]+)/delete/$'
,
api
.
GroupDeleteApi
.
as_view
(),
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment