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
1ae0a8d1
Commit
1ae0a8d1
authored
Aug 05, 2019
by
BaiJiangJie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Feature] 应用授权: DatabasePermission 添加页面View
parent
329f8446
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
768 additions
and
10 deletions
+768
-10
__init__.py
apps/perms/forms/__init__.py
+1
-0
database_permission.py
apps/perms/forms/database_permission.py
+39
-0
hands.py
apps/perms/hands.py
+1
-1
database_permission_create_update.html
...ms/templates/perms/database_permission_create_update.html
+143
-0
database_permission_database.html
apps/perms/templates/perms/database_permission_database.html
+170
-0
database_permission_detail.html
apps/perms/templates/perms/database_permission_detail.html
+160
-0
database_permission_list.html
apps/perms/templates/perms/database_permission_list.html
+93
-0
database_permission_user.html
apps/perms/templates/perms/database_permission_user.html
+0
-0
remote_app_permission_detail.html
apps/perms/templates/perms/remote_app_permission_detail.html
+0
-9
views_urls.py
apps/perms/urls/views_urls.py
+8
-0
__init__.py
apps/perms/views/__init__.py
+1
-0
database_permission.py
apps/perms/views/database_permission.py
+149
-0
_nav.html
apps/templates/_nav.html
+3
-0
No files found.
apps/perms/forms/__init__.py
View file @
1ae0a8d1
...
@@ -3,3 +3,4 @@
...
@@ -3,3 +3,4 @@
from
.asset_permission
import
*
from
.asset_permission
import
*
from
.remote_app_permission
import
*
from
.remote_app_permission
import
*
from
.database_permission
import
*
apps/perms/forms/database_permission.py
0 → 100644
View file @
1ae0a8d1
# coding: utf-8
#
from
django.utils.translation
import
ugettext
as
_
from
django
import
forms
from
orgs.mixins
import
OrgModelForm
from
orgs.utils
import
current_org
from
..models
import
DatabasePermission
__all__
=
[
'DatabasePermissionCreateUpdateForm'
,
]
class
DatabasePermissionCreateUpdateForm
(
OrgModelForm
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
super
()
.
__init__
(
*
args
,
**
kwargs
)
users_field
=
self
.
fields
.
get
(
'users'
)
if
hasattr
(
users_field
,
'queryset'
):
users_field
.
queryset
=
current_org
.
get_org_users
()
class
Meta
:
model
=
DatabasePermission
exclude
=
(
'id'
,
'date_created'
,
'created_by'
,
'org_id'
)
widgets
=
{
'users'
:
forms
.
SelectMultiple
(
attrs
=
{
'class'
:
'select2'
,
'data-placeholder'
:
_
(
'User'
)}
),
'user_groups'
:
forms
.
SelectMultiple
(
attrs
=
{
'class'
:
'select2'
,
'data-placeholder'
:
_
(
'User group'
)}
),
'databases'
:
forms
.
SelectMultiple
(
attrs
=
{
'class'
:
'select2'
,
'data-placeholder'
:
_
(
'Database'
)}
)
}
apps/perms/hands.py
View file @
1ae0a8d1
...
@@ -5,7 +5,7 @@ from users.models import User, UserGroup
...
@@ -5,7 +5,7 @@ from users.models import User, UserGroup
from
assets.models
import
Asset
,
SystemUser
,
Node
,
Label
from
assets.models
import
Asset
,
SystemUser
,
Node
,
Label
from
assets.serializers
import
NodeSerializer
from
assets.serializers
import
NodeSerializer
from
applications.serializers
import
RemoteAppSerializer
from
applications.serializers
import
RemoteAppSerializer
from
applications.models
import
RemoteApp
from
applications.models
import
RemoteApp
,
Database
apps/perms/templates/perms/database_permission_create_update.html
0 → 100644
View file @
1ae0a8d1
{% extends 'base.html' %}
{% load i18n %}
{% load static %}
{% load bootstrap3 %}
{% block custom_head_css_js %}
<link
href=
"{% static 'css/plugins/select2/select2.min.css' %}"
rel=
"stylesheet"
>
<script
src=
"{% static 'js/plugins/select2/select2.full.min.js' %}"
></script>
<link
href=
"{% static 'css/plugins/datepicker/datepicker3.css' %}"
rel=
"stylesheet"
>
{% endblock %}
{% block content %}
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"col-sm-12"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title"
>
<h5>
{{ action }}
</h5>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
</a>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
</a>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
</div>
</div>
<div
class=
"ibox-content"
>
<form
method=
"post"
class=
"form-horizontal"
action=
""
>
{% if form.non_field_errors %}
<div
class=
"alert alert-danger"
>
{{ form.non_field_errors }}
</div>
{% endif %}
{% csrf_token %}
<h3>
{% trans 'Basic' %}
</h3>
{% bootstrap_field form.name layout="horizontal" %}
<div
class=
"hr-line-dashed"
></div>
<h3>
{% trans 'User' %}
</h3>
{% bootstrap_field form.users layout="horizontal" %}
{% bootstrap_field form.user_groups layout="horizontal" %}
<div
class=
"hr-line-dashed"
></div>
<h3>
{% trans 'Database' %}
</h3>
{% bootstrap_field form.databases layout="horizontal" %}
<div
class=
"hr-line-dashed"
></div>
<h3>
{% trans 'Other' %}
</h3>
<div
class=
"form-group"
>
<label
for=
"{{ form.is_active.id_for_label }}"
class=
"col-sm-2 control-label"
>
{% trans 'Active' %}
</label>
<div
class=
"col-sm-8"
>
{{ form.is_active }}
</div>
</div>
<div
class=
"form-group {% if form.date_expired.errors or form.date_start.errors %} has-error {% endif %}"
id=
"date_5"
>
<label
for=
"{{ form.date_expired.id_for_label }}"
class=
"col-sm-2 control-label"
>
{% trans 'Validity period' %}
</label>
<div
class=
"col-sm-9"
>
<div
class=
"input-daterange input-group"
id=
"datepicker"
>
<span
class=
"input-group-addon"
><i
class=
"fa fa-calendar"
></i></span>
{% if form.errors %}
<input
type=
"text"
class=
"input-sm form-control"
id=
"date_start"
name=
"date_start"
value=
"{{ form.date_start.value }}"
>
<span
class=
"input-group-addon"
>
to
</span>
<input
type=
"text"
class=
"input-sm form-control"
id=
"date_expired"
name=
"date_expired"
value=
"{{ form.date_expired.value }}"
>
{% else %}
<input
type=
"text"
class=
"input-sm form-control"
id=
"date_start"
name=
"date_start"
value=
"{{ form.date_start.value|date:'Y-m-d H:i' }}"
>
<span
class=
"input-group-addon"
>
to
</span>
<input
type=
"text"
class=
"input-sm form-control"
id=
"date_expired"
name=
"date_expired"
value=
"{{ form.date_expired.value|date:'Y-m-d H:i' }}"
>
{% endif %}
</div>
<span
class=
"help-block "
>
{{ form.date_expired.errors }}
</span>
<span
class=
"help-block "
>
{{ form.date_start.errors }}
</span>
</div>
</div>
{% bootstrap_field form.comment layout="horizontal" %}
<div
class=
"form-group"
>
<div
class=
"col-sm-4 col-sm-offset-2"
>
<button
class=
"btn btn-white"
type=
"reset"
>
{% trans 'Reset' %}
</button>
<button
id=
"submit_button"
class=
"btn btn-primary"
type=
"submit"
>
{% trans 'Submit' %}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block custom_foot_js %}
<script
src=
"{% static 'js/plugins/datepicker/bootstrap-datepicker.js' %}"
></script>
<script
type=
"text/javascript"
src=
'{% static "js/plugins/daterangepicker/moment.min.js" %}'
></script>
<script
type=
"text/javascript"
src=
'{% static "js/plugins/daterangepicker/daterangepicker.min.js" %}'
></script>
<link
rel=
"stylesheet"
type=
"text/css"
href=
{%
static
"
css
/
plugins
/
daterangepicker
/
daterangepicker
.
css
"
%}
/>
<script>
var
dateOptions
=
{
singleDatePicker
:
true
,
showDropdowns
:
true
,
timePicker
:
true
,
timePicker24Hour
:
true
,
autoApply
:
true
,
locale
:
{
format
:
'YYYY-MM-DD HH:mm'
}
};
$
(
document
).
ready
(
function
()
{
$
(
'.select2'
).
select2
({
closeOnSelect
:
false
});
$
(
'#date_start'
).
daterangepicker
(
dateOptions
);
$
(
'#date_expired'
).
daterangepicker
(
dateOptions
);
})
.
on
(
"submit"
,
"form"
,
function
(
evt
)
{
evt
.
preventDefault
();
var
form
=
$
(
"form"
);
var
data
=
form
.
serializeObject
();
var
method
=
"POST"
;
var
the_url
=
'{% url "api-perms:database-permission-list" %}'
;
var
redirect_to
=
'{% url "perms:database-permission-list" %}'
;
{
%
if
type
==
"update"
%
}
the_url
=
'{% url "api-perms:database-permission-detail" pk=object.id %}'
;
method
=
"PUT"
;
{
%
endif
%
}
objectAttrsIsList
(
data
,
[
'users'
,
'user_groups'
,
'databases'
]);
objectAttrsIsDatetime
(
data
,
[
'date_expired'
,
'date_start'
]);
objectAttrsIsBool
(
data
,
[
'is_active'
]);
var
props
=
{
url
:
the_url
,
data
:
data
,
method
:
method
,
form
:
form
,
redirect_to
:
redirect_to
};
formSubmit
(
props
);
})
</script>
{% endblock %}
apps/perms/templates/perms/database_permission_database.html
0 → 100644
View file @
1ae0a8d1
{% extends 'base.html' %}
{% load static %}
{% load i18n %}
{% block custom_head_css_js %}
<link
href=
"{% static 'css/plugins/select2/select2.min.css' %}"
rel=
"stylesheet"
>
<script
src=
"{% static 'js/plugins/select2/select2.full.min.js' %}"
></script>
{% endblock %}
{% block content %}
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"col-sm-12"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"panel-options"
>
<ul
class=
"nav nav-tabs"
>
<li>
<a
href=
"{% url 'perms:database-permission-detail' pk=database_permission.id %}"
class=
"text-center"
><i
class=
"fa fa-laptop"
></i>
{% trans 'Detail' %}
</a>
</li>
<li>
<a
href=
"{% url 'perms:database-permission-user-list' pk=database_permission.id %}"
class=
"text-center"
>
<i
class=
"fa fa-group"
></i>
{% trans 'Users and user groups' %}
</a>
</li>
<li
class=
"active"
>
<a
href=
"{% url 'perms:database-permission-database-list' pk=database_permission.id %}"
class=
"text-center"
>
<i
class=
"fa fa-database"
></i>
{% trans 'Database' %}
</a>
</li>
</ul>
</div>
<div
class=
"tab-content"
>
<div
class=
"col-sm-8"
style=
"padding-left: 0;"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title"
>
<span
style=
"float: left"
>
{% trans 'Database list of ' %}
<b>
{{ database_permission.name }}
</b></span>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
</a>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
</ul>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
</div>
</div>
<div
class=
"ibox-content"
>
<table
class=
"table table-hover"
>
<thead>
<tr>
<th>
{% trans 'Name' %}
</th>
<th>
{% trans 'Type' %}
</th>
<th>
{% trans 'Host' %}
</th>
<th>
{% trans 'Port' %}
</th>
<th>
{% trans 'User' %}
</th>
<th></th>
</tr>
</thead>
<tbody>
{% for database in object_list %}
<tr>
<td>
{{ database.name }}
</td>
<td>
{{ database.get_type_display }}
</td>
<td>
{{ database.host }}
</td>
<td>
{{ database.port }}
</td>
<td>
{{ database.user }}
</td>
<td>
<button
data-did=
"{{ database.id }}"
class=
"btn btn-danger btn-xs btn-remove-database"
type=
"button"
style=
"float: right;"
><i
class=
"fa fa-minus"
></i></button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<div
class=
"row"
>
{% include '_pagination.html' %}
</div>
</div>
</div>
</div>
<div
class=
"col-sm-4"
style=
"padding-left: 0;padding-right: 0"
>
<div
class=
"panel panel-primary"
>
<div
class=
"panel-heading"
>
<i
class=
"fa fa-info-circle"
></i>
{% trans 'Add database to this permission' %}
</div>
<div
class=
"panel-body"
>
<table
class=
"table"
>
<tbody>
<form>
<tr
class=
"no-borders-tr"
>
<td
colspan=
"2"
>
<select
data-placeholder=
"{% trans 'Select database' %}"
class=
"select2"
id=
"database_select2"
style=
"width: 100%"
multiple=
""
tabindex=
"4"
>
{% for database in database_remain %}
<option
value=
"{{ database.id }}"
>
{{ database }}
</option>
{% endfor %}
</select>
</td>
</tr>
<tr
class=
"no-borders-tr"
>
<td
colspan=
"2"
>
<button
type=
"button"
class=
"btn btn-primary btn-sm btn-add-database"
>
{% trans 'Add' %}
</button>
</td>
</tr>
</form>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block custom_foot_js %}
<script>
function
addDatabase
(
databases
)
{
var
the_url
=
"{% url 'api-perms:database-permission-add-database' pk=database_permission.id %}"
;
var
body
=
{
databases
:
databases
};
var
success
=
function
(
data
)
{
location
.
reload
();
};
requestApi
({
url
:
the_url
,
body
:
JSON
.
stringify
(
body
),
success
:
success
});
}
function
removeDatabase
(
databases
)
{
var
the_url
=
"{% url 'api-perms:database-permission-remove-database' pk=database_permission.id %}"
;
var
body
=
{
databases
:
databases
};
var
success
=
function
(
data
)
{
location
.
reload
();
};
requestApi
({
url
:
the_url
,
body
:
JSON
.
stringify
(
body
),
success
:
success
});
}
$
(
document
).
ready
(
function
()
{
$
(
'.select2'
).
select2
();
})
.
on
(
'click'
,
'.btn-add-database'
,
function
()
{
var
databases_selected
=
$
(
"#database_select2 option:selected"
).
map
(
function
()
{
return
$
(
this
).
attr
(
'value'
);
}).
get
();
if
(
databases_selected
.
length
===
0
)
{
return
false
;
}
addDatabase
(
databases_selected
);
})
.
on
(
'click'
,
'.btn-remove-database'
,
function
()
{
var
database_id
=
$
(
this
).
data
(
"did"
);
if
(
database_id
===
""
)
{
return
}
var
databases
=
[
database_id
];
removeDatabase
(
databases
)
})
</script>
{% endblock %}
apps/perms/templates/perms/database_permission_detail.html
0 → 100644
View file @
1ae0a8d1
{% extends 'base.html' %}
{% load static %}
{% load i18n %}
{% block custom_head_css_js %}
<link
href=
"{% static 'css/plugins/select2/select2.min.css' %}"
rel=
"stylesheet"
>
<script
src=
"{% static 'js/plugins/select2/select2.full.min.js' %}"
></script>
{% endblock %}
{% block content %}
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"col-sm-12"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"panel-options"
>
<ul
class=
"nav nav-tabs"
>
<li
class=
"active"
>
<a
href=
"{% url 'perms:database-permission-detail' pk=object.id %}"
class=
"text-center"
><i
class=
"fa fa-laptop"
></i>
{% trans 'Detail' %}
</a>
</li>
<li>
<a
href=
"{% url 'perms:database-permission-user-list' pk=object.id %}"
class=
"text-center"
>
<i
class=
"fa fa-group"
></i>
{% trans 'Users and user groups' %}
</a>
</li>
<li>
<a
href=
"{% url 'perms:database-permission-database-list' pk=object.id %}"
class=
"text-center"
>
<i
class=
"fa fa-database"
></i>
{% trans 'Database' %}
</a>
</li>
<li
class=
"pull-right"
>
<a
class=
"btn btn-outline btn-default"
href=
"{% url 'perms:database-permission-update' pk=object.id %}"
><i
class=
"fa fa-edit"
></i>
{% trans 'Update' %}
</a>
</li>
<li
class=
"pull-right"
>
<a
class=
"btn btn-outline btn-danger btn-delete"
>
<i
class=
"fa fa-trash-o"
></i>
{% trans 'Delete' %}
</a>
</li>
</ul>
</div>
<div
class=
"tab-content"
>
<div
class=
"col-sm-8"
style=
"padding-left: 0;"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title"
>
<span
class=
"label"
><b>
{{ object.name }}
</b></span>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
</a>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
</ul>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
</div>
</div>
<div
class=
"ibox-content"
>
<table
class=
"table"
>
<tbody>
<tr
class=
"no-borders-tr"
>
<td>
{% trans 'Name' %}:
</td>
<td><b>
{{ object.name }}
</b></td>
</tr>
<tr>
<td>
{% trans 'User count' %}:
</td>
<td><b>
{{ object.users.count }}
</b></td>
</tr>
<tr>
<td>
{% trans 'User group count' %}:
</td>
<td><b>
{{ object.user_groups.count }}
</b></td>
</tr>
<tr>
<td>
{% trans 'Database count' %}:
</td>
<td><b>
{{ object.databases.count }}
</b></td>
</tr>
<tr>
<td>
{% trans 'Date start' %}:
</td>
<td><b>
{{ object.date_start }}
</b></td>
</tr>
<tr>
<td>
{% trans 'Date expired' %}:
</td>
<td><b>
{{ object.date_expired }}
</b></td>
</tr>
<tr>
<td>
{% trans 'Date created' %}:
</td>
<td><b>
{{ object.date_created }}
</b></td>
</tr>
<tr>
<td>
{% trans 'Created by' %}:
</td>
<td><b>
{{ object.created_by }}
</b></td>
</tr>
<tr>
<td>
{% trans 'Comment' %}:
</td>
<td><b>
{{ object.comment }}
</b></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div
class=
"col-sm-4"
style=
"padding-left: 0;padding-right: 0"
>
<div
class=
"panel panel-primary"
>
<div
class=
"panel-heading"
>
<i
class=
"fa fa-info-circle"
></i>
{% trans 'Quick update' %}
</div>
<div
class=
"panel-body"
>
<table
class=
"table"
>
<tbody>
<tr
class=
"no-borders-tr"
>
<td
width=
"50%"
>
{% trans 'Active' %} :
</td>
<td><span
style=
"float: right"
>
<div
class=
"switch"
>
<div
class=
"onoffswitch"
>
<input
type=
"checkbox"
{%
if
object
.
is_active
%}
checked
{%
endif
%}
class=
"onoffswitch-checkbox"
id=
"is_active"
>
<label
class=
"onoffswitch-label"
for=
"is_active"
>
<span
class=
"onoffswitch-inner"
></span>
<span
class=
"onoffswitch-switch"
></span>
</label>
</div>
</div>
</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block custom_foot_js %}
<script>
$
(
document
).
ready
(
function
()
{
})
.
on
(
'click'
,
'.btn-delete'
,
function
()
{
var
$this
=
$
(
this
);
var
name
=
"{{ object.name }}"
;
var
rid
=
"{{ object.id }}"
;
var
the_url
=
'{% url "api-perms:database-permission-detail" pk=DEFAULT_PK %}'
.
replace
(
'{{ DEFAULT_PK }}'
,
rid
);
var
redirect_url
=
"{% url 'perms:database-permission-list' %}"
;
objectDelete
(
$this
,
name
,
the_url
,
redirect_url
);
}).
on
(
'click'
,
'#is_active'
,
function
()
{
var
the_url
=
'{% url "api-perms:database-permission-detail" pk=object.id %}'
;
var
checked
=
$
(
this
).
prop
(
'checked'
);
var
body
=
{
'is_active'
:
checked
};
requestApi
({
url
:
the_url
,
body
:
JSON
.
stringify
(
body
)
});
})
</script>
{% endblock %}
apps/perms/templates/perms/database_permission_list.html
0 → 100644
View file @
1ae0a8d1
{% extends '_base_list.html' %}
{% load i18n static %}
{% block table_search %}{% endblock %}
{% block table_container %}
<div
class=
"uc pull-left m-r-5"
>
<a
href=
"{% url 'perms:database-permission-create' %}"
class=
"btn btn-sm btn-primary"
>
{% trans "Create permission" %}
</a>
</div>
<table
class=
"table table-striped table-bordered table-hover "
id=
"database_permission_list_table"
>
<thead>
<tr>
<th
class=
"text-center"
>
<input
type=
"checkbox"
id=
"check_all"
class=
"ipt_check_all"
>
</th>
<th
class=
"text-center"
>
{% trans 'Name' %}
</th>
<th
class=
"text-center"
>
{% trans 'User' %}
</th>
<th
class=
"text-center"
>
{% trans 'User group' %}
</th>
<th
class=
"text-center"
>
{% trans 'Database' %}
</th>
<th
class=
"text-center"
>
{% trans 'Validity' %}
</th>
<th
class=
"text-center"
>
{% trans 'Action' %}
</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
{% endblock %}
{% block content_bottom_left %}{% endblock %}
{% block custom_foot_js %}
<script>
function
initTable
()
{
var
options
=
{
ele
:
$
(
'#database_permission_list_table'
),
columnDefs
:
[
{
targets
:
1
,
createdCell
:
function
(
td
,
cellData
,
rowData
)
{
cellData
=
htmlEscape
(
cellData
);
{
%
url
'perms:database-permission-detail'
pk
=
DEFAULT_PK
as
the_url
%
}
var
detail_btn
=
'<a href="{{ the_url }}">'
+
cellData
+
'</a>'
;
$
(
td
).
html
(
detail_btn
.
replace
(
'{{ DEFAULT_PK }}'
,
rowData
.
id
));
}},
{
targets
:
2
,
createdCell
:
function
(
td
,
cellData
,
rowData
)
{
var
num
=
cellData
.
length
;
$
(
td
).
html
(
num
);
}},
{
targets
:
3
,
createdCell
:
function
(
td
,
cellData
,
rowData
)
{
var
num
=
cellData
.
length
;
$
(
td
).
html
(
num
);
}},
{
targets
:
4
,
createdCell
:
function
(
td
,
cellData
,
rowData
)
{
var
num
=
cellData
.
length
;
$
(
td
).
html
(
num
);
}},
{
targets
:
5
,
createdCell
:
function
(
td
,
cellData
,
rowData
)
{
if
(
!
cellData
)
{
$
(
td
).
html
(
'<i class="fa fa-times text-danger"></i>'
)
}
else
{
$
(
td
).
html
(
'<i class="fa fa-check text-navy"></i>'
)
}
}},
{
targets
:
6
,
createdCell
:
function
(
td
,
cellData
,
rowData
)
{
var
update_btn
=
'<a href="{% url "perms:database-permission-update" pk=DEFAULT_PK %}" class="btn btn-xs btn-info">{% trans "Update" %}</a>'
.
replace
(
"{{ DEFAULT_PK }}"
,
cellData
);
var
del_btn
=
'<a class="btn btn-xs btn-danger m-l-xs btn-delete" data-rid="{{ DEFAULT_PK }}">{% trans "Delete" %}</a>'
.
replace
(
'{{ DEFAULT_PK }}'
,
cellData
);
$
(
td
).
html
(
update_btn
+
del_btn
)
}}
],
ajax_url
:
'{% url "api-perms:database-permission-list" %}'
,
columns
:
[
{
data
:
"id"
},
{
data
:
"name"
},
{
data
:
"users"
,
orderable
:
false
},
{
data
:
"user_groups"
,
orderable
:
false
},
{
data
:
"databases"
,
orderable
:
false
},
{
data
:
"is_valid"
,
orderable
:
false
},
{
data
:
"id"
,
orderable
:
false
}
],
op_html
:
$
(
'#actions'
).
html
()
};
jumpserver
.
initServerSideDataTable
(
options
);
}
$
(
document
).
ready
(
function
(){
initTable
();
})
.
on
(
'click'
,
'.btn-delete'
,
function
()
{
var
$this
=
$
(
this
);
var
$data_table
=
$
(
'#database_list_table'
).
DataTable
();
var
name
=
$
(
this
).
closest
(
"tr"
).
find
(
":nth-child(2)"
).
children
(
'a'
).
html
();
var
rid
=
$this
.
data
(
'rid'
);
var
the_url
=
'{% url "api-perms:database-permission-detail" pk=DEFAULT_PK %}'
.
replace
(
'{{ DEFAULT_PK }}'
,
rid
);
objectDelete
(
$this
,
name
,
the_url
);
setTimeout
(
function
()
{
$data_table
.
ajax
.
reload
();
},
3000
);
});
</script>
{% endblock %}
apps/perms/templates/perms/database_permission_user.html
0 → 100644
View file @
1ae0a8d1
This diff is collapsed.
Click to expand it.
apps/perms/templates/perms/remote_app_permission_detail.html
View file @
1ae0a8d1
...
@@ -137,15 +137,6 @@
...
@@ -137,15 +137,6 @@
{% block custom_foot_js %}
{% block custom_foot_js %}
<script>
<script>
$
(
document
).
ready
(
function
()
{
$
(
document
).
ready
(
function
()
{
$
(
'.select2'
).
select2
()
.
on
(
'select2:select'
,
function
(
evt
)
{
var
data
=
evt
.
params
.
data
;
jumpserver
.
system_users_selected
[
data
.
id
]
=
data
.
text
;
})
.
on
(
'select2:unselect'
,
function
(
evt
)
{
var
data
=
evt
.
params
.
data
;
delete
jumpserver
.
system_users_selected
[
data
.
id
]
})
})
})
.
on
(
'click'
,
'.btn-delete'
,
function
()
{
.
on
(
'click'
,
'.btn-delete'
,
function
()
{
var
$this
=
$
(
this
);
var
$this
=
$
(
this
);
...
...
apps/perms/urls/views_urls.py
View file @
1ae0a8d1
...
@@ -23,4 +23,12 @@ urlpatterns = [
...
@@ -23,4 +23,12 @@ urlpatterns = [
path
(
'remote-app-permission/<uuid:pk>/'
,
views
.
RemoteAppPermissionDetailView
.
as_view
(),
name
=
'remote-app-permission-detail'
),
path
(
'remote-app-permission/<uuid:pk>/'
,
views
.
RemoteAppPermissionDetailView
.
as_view
(),
name
=
'remote-app-permission-detail'
),
path
(
'remote-app-permission/<uuid:pk>/user/'
,
views
.
RemoteAppPermissionUserView
.
as_view
(),
name
=
'remote-app-permission-user-list'
),
path
(
'remote-app-permission/<uuid:pk>/user/'
,
views
.
RemoteAppPermissionUserView
.
as_view
(),
name
=
'remote-app-permission-user-list'
),
path
(
'remote-app-permission/<uuid:pk>/remote-app/'
,
views
.
RemoteAppPermissionRemoteAppView
.
as_view
(),
name
=
'remote-app-permission-remote-app-list'
),
path
(
'remote-app-permission/<uuid:pk>/remote-app/'
,
views
.
RemoteAppPermissionRemoteAppView
.
as_view
(),
name
=
'remote-app-permission-remote-app-list'
),
# database-permission
path
(
'database-permission/'
,
views
.
DatabasePermissionListView
.
as_view
(),
name
=
'database-permission-list'
),
path
(
'database-permission/create/'
,
views
.
DatabasePermissionCreateView
.
as_view
(),
name
=
'database-permission-create'
),
path
(
'database-permission/<uuid:pk>/update/'
,
views
.
DatabasePermissionUpdateView
.
as_view
(),
name
=
'database-permission-update'
),
path
(
'database-permission/<uuid:pk>/'
,
views
.
DatabasePermissionDetailView
.
as_view
(),
name
=
'database-permission-detail'
),
path
(
'database-permission/<uuid:pk>/user/'
,
views
.
DatabasePermissionUserView
.
as_view
(),
name
=
'database-permission-user-list'
),
path
(
'database-permission/<uuid:pk>/database/'
,
views
.
DatabasePermissionDatabaseView
.
as_view
(),
name
=
'database-permission-database-list'
),
]
]
apps/perms/views/__init__.py
View file @
1ae0a8d1
...
@@ -3,3 +3,4 @@
...
@@ -3,3 +3,4 @@
from
.asset_permission
import
*
from
.asset_permission
import
*
from
.remote_app_permission
import
*
from
.remote_app_permission
import
*
from
.database_permission
import
*
apps/perms/views/database_permission.py
0 → 100644
View file @
1ae0a8d1
# coding: utf-8
#
from
django.utils.translation
import
ugettext
as
_
from
django.urls
import
reverse_lazy
from
django.views.generic
import
(
TemplateView
,
CreateView
,
UpdateView
,
DetailView
,
ListView
)
from
django.views.generic.edit
import
SingleObjectMixin
from
django.conf
import
settings
from
common.permissions
import
PermissionsMixin
,
IsOrgAdmin
from
orgs.utils
import
current_org
from
..hands
import
Database
,
UserGroup
from
..models
import
DatabasePermission
from
..forms
import
DatabasePermissionCreateUpdateForm
__all__
=
[
'DatabasePermissionListView'
,
'DatabasePermissionCreateView'
,
'DatabasePermissionUpdateView'
,
'DatabasePermissionDetailView'
,
'DatabasePermissionUserView'
,
'DatabasePermissionDatabaseView'
]
class
DatabasePermissionListView
(
PermissionsMixin
,
TemplateView
):
template_name
=
'perms/database_permission_list.html'
permission_classes
=
[
IsOrgAdmin
]
def
get_context_data
(
self
,
**
kwargs
):
context
=
{
'app'
:
_
(
'Perms'
),
'action'
:
_
(
'Database permission list'
),
}
kwargs
.
update
(
context
)
return
super
()
.
get_context_data
(
**
kwargs
)
class
DatabasePermissionCreateView
(
PermissionsMixin
,
CreateView
):
template_name
=
'perms/database_permission_create_update.html'
model
=
DatabasePermission
form_class
=
DatabasePermissionCreateUpdateForm
success_url
=
reverse_lazy
(
'perms:database-permission-list'
)
permission_classes
=
[
IsOrgAdmin
]
def
get_context_data
(
self
,
**
kwargs
):
context
=
{
'app'
:
_
(
'Perms'
),
'action'
:
_
(
'Create database permission'
),
'type'
:
'create'
}
kwargs
.
update
(
context
)
return
super
()
.
get_context_data
(
**
kwargs
)
class
DatabasePermissionUpdateView
(
PermissionsMixin
,
UpdateView
):
template_name
=
'perms/database_permission_create_update.html'
model
=
DatabasePermission
form_class
=
DatabasePermissionCreateUpdateForm
success_url
=
reverse_lazy
(
'perms:database-permission-list'
)
permission_classes
=
[
IsOrgAdmin
]
def
get_context_data
(
self
,
**
kwargs
):
context
=
{
'app'
:
_
(
'Perms'
),
'action'
:
_
(
'Update database permission'
),
'type'
:
'update'
}
kwargs
.
update
(
context
)
return
super
()
.
get_context_data
(
**
kwargs
)
class
DatabasePermissionDetailView
(
PermissionsMixin
,
DetailView
):
template_name
=
'perms/database_permission_detail.html'
model
=
DatabasePermission
permission_classes
=
[
IsOrgAdmin
]
def
get_context_data
(
self
,
**
kwargs
):
context
=
{
'app'
:
_
(
'Perms'
),
'action'
:
_
(
'Database permission detail'
),
}
kwargs
.
update
(
context
)
return
super
()
.
get_context_data
(
**
kwargs
)
class
DatabasePermissionUserView
(
PermissionsMixin
,
SingleObjectMixin
,
ListView
):
template_name
=
'perms/database_permission_user.html'
context_object_name
=
'database_permission'
paginate_by
=
settings
.
DISPLAY_PER_PAGE
object
=
None
permission_classes
=
[
IsOrgAdmin
]
def
get
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
object
=
self
.
get_object
(
queryset
=
DatabasePermission
.
objects
.
all
())
return
super
()
.
get
(
request
,
*
args
,
**
kwargs
)
def
get_queryset
(
self
):
queryset
=
list
(
self
.
object
.
get_all_users
())
return
queryset
def
get_context_data
(
self
,
**
kwargs
):
context
=
{
'app'
:
_
(
'Perms'
),
'action'
:
_
(
'Database permission user list'
),
'users_remain'
:
current_org
.
get_org_users
()
.
exclude
(
databasepermission
=
self
.
object
),
'user_groups_remain'
:
UserGroup
.
objects
.
exclude
(
databasepermission
=
self
.
object
)
}
kwargs
.
update
(
context
)
return
super
()
.
get_context_data
(
**
kwargs
)
class
DatabasePermissionDatabaseView
(
PermissionsMixin
,
SingleObjectMixin
,
ListView
):
template_name
=
'perms/database_permission_database.html'
context_object_name
=
'database_permission'
paginate_by
=
settings
.
DISPLAY_PER_PAGE
object
=
None
permission_classes
=
[
IsOrgAdmin
]
def
get
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
object
=
self
.
get_object
(
queryset
=
DatabasePermission
.
objects
.
all
()
)
return
super
()
.
get
(
request
,
*
args
,
**
kwargs
)
def
get_queryset
(
self
):
queryset
=
list
(
self
.
object
.
get_all_databases
())
return
queryset
def
get_context_data
(
self
,
**
kwargs
):
database_granted
=
self
.
get_queryset
()
database_remain
=
Database
.
objects
.
exclude
(
id__in
=
[
a
.
id
for
a
in
database_granted
])
context
=
{
'app'
:
_
(
'Perms'
),
'action'
:
_
(
'Database permission database list'
),
'database_remain'
:
database_remain
}
kwargs
.
update
(
context
)
return
super
()
.
get_context_data
(
**
kwargs
)
apps/templates/_nav.html
View file @
1ae0a8d1
...
@@ -48,6 +48,9 @@
...
@@ -48,6 +48,9 @@
<li
id=
"remote-app-permission"
>
<li
id=
"remote-app-permission"
>
<a
href=
"{% url 'perms:remote-app-permission-list' %}"
>
{% trans 'RemoteApp' %}
</a>
<a
href=
"{% url 'perms:remote-app-permission-list' %}"
>
{% trans 'RemoteApp' %}
</a>
</li>
</li>
<li
id=
"database-permission"
>
<a
href=
"{% url 'perms:database-permission-list' %}"
>
{% trans 'Database' %}
</a>
</li>
{% endif %}
{% endif %}
</ul>
</ul>
</li>
</li>
...
...
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