[Change] 全部使用uuid作为主键

This commit is contained in:
ibuler 2017-11-23 14:08:01 +08:00
parent d80cbe270a
commit e7f38ec894
21 changed files with 102 additions and 89 deletions

View File

@ -1,5 +1,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import uuid
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -7,6 +9,7 @@ from users.models import User
class Terminal(models.Model): class Terminal(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
name = models.CharField(max_length=32, unique=True, verbose_name=_('Name')) name = models.CharField(max_length=32, unique=True, verbose_name=_('Name'))
remote_addr = models.CharField(max_length=128, verbose_name=_('Remote Address')) remote_addr = models.CharField(max_length=128, verbose_name=_('Remote Address'))
ssh_port = models.IntegerField(verbose_name=_('SSH Port'), default=2222) ssh_port = models.IntegerField(verbose_name=_('SSH Port'), default=2222)
@ -57,6 +60,7 @@ class Terminal(models.Model):
class TerminalStatus(models.Model): class TerminalStatus(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
session_online = models.IntegerField(verbose_name=_("Session Online"), default=0) session_online = models.IntegerField(verbose_name=_("Session Online"), default=0)
cpu_used = models.FloatField(verbose_name=_("CPU Usage")) cpu_used = models.FloatField(verbose_name=_("CPU Usage"))
memory_used = models.FloatField(verbose_name=_("Memory Used")) memory_used = models.FloatField(verbose_name=_("Memory Used"))
@ -76,7 +80,7 @@ class TerminalSession(models.Model):
('WT', 'Web Terminal'), ('WT', 'Web Terminal'),
) )
id = models.UUIDField(primary_key=True) id = models.UUIDField(default=uuid.uuid4, primary_key=True)
user = models.CharField(max_length=128, verbose_name=_("User")) user = models.CharField(max_length=128, verbose_name=_("User"))
asset = models.CharField(max_length=1024, verbose_name=_("Asset")) asset = models.CharField(max_length=1024, verbose_name=_("Asset"))
system_user = models.CharField(max_length=128, verbose_name=_("System User")) system_user = models.CharField(max_length=128, verbose_name=_("System User"))
@ -96,6 +100,7 @@ class TerminalSession(models.Model):
class TerminalTask(models.Model): class TerminalTask(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
name = models.CharField(max_length=128, verbose_name=_("Name")) name = models.CharField(max_length=128, verbose_name=_("Name"))
args = models.CharField(max_length=1024, verbose_name=_("Task Args")) args = models.CharField(max_length=1024, verbose_name=_("Task Args"))
terminal = models.ForeignKey(Terminal, null=True, on_delete=models.CASCADE) terminal = models.ForeignKey(Terminal, null=True, on_delete=models.CASCADE)

View File

@ -10,12 +10,12 @@ app_name = 'applications'
urlpatterns = [ urlpatterns = [
url(r'^terminal/$', views.TerminalListView.as_view(), name='terminal-list'), url(r'^terminal/$', views.TerminalListView.as_view(), name='terminal-list'),
url(r'^terminal/(?P<pk>\d+)/$', views.TerminalDetailView.as_view(), url(r'^terminal/(?P<pk>[0-9a-zA-Z\-]+)/$', views.TerminalDetailView.as_view(),
name='terminal-detail'), name='terminal-detail'),
url(r'^terminal/(?P<pk>\d+)/connect/$', views.TerminalConnectView.as_view(), url(r'^terminal/(?P<pk>[0-9a-zA-Z\-]+)/connect/$', views.TerminalConnectView.as_view(),
name='terminal-connect'), name='terminal-connect'),
url(r'^terminal/(?P<pk>\d+)/update$', views.TerminalUpdateView.as_view(), url(r'^terminal/(?P<pk>[0-9a-zA-Z\-]+)/update$', views.TerminalUpdateView.as_view(),
name='terminal-update'), name='terminal-update'),
url(r'^terminal/(?P<pk>\d+)/modal/accept$', views.TerminalModelAccept.as_view(), url(r'^terminal/(?P<pk>[0-9a-zA-Z\-]+)/modal/accept$', views.TerminalModelAccept.as_view(),
name='terminal-modal-accept'), name='terminal-modal-accept'),
] ]

View File

@ -4,6 +4,8 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import uuid
from django.db import models from django.db import models
import logging import logging
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -38,6 +40,7 @@ class Asset(models.Model):
) )
# Important # Important
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
ip = models.GenericIPAddressField(max_length=32, verbose_name=_('IP'), db_index=True) ip = models.GenericIPAddressField(max_length=32, verbose_name=_('IP'), db_index=True)
hostname = models.CharField(max_length=128, unique=True, verbose_name=_('Hostname')) hostname = models.CharField(max_length=128, unique=True, verbose_name=_('Hostname'))
port = models.IntegerField(default=22, verbose_name=_('Port')) port = models.IntegerField(default=22, verbose_name=_('Port'))

View File

@ -4,6 +4,8 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import uuid
from django.db import models from django.db import models
import logging import logging
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -15,6 +17,7 @@ logger = logging.getLogger(__name__)
class AssetGroup(models.Model): class AssetGroup(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
name = models.CharField(max_length=64, unique=True, verbose_name=_('Name')) name = models.CharField(max_length=64, unique=True, verbose_name=_('Name'))
system_users = models.ManyToManyField(SystemUser, related_name='asset_groups', blank=True) system_users = models.ManyToManyField(SystemUser, related_name='asset_groups', blank=True)
created_by = models.CharField(max_length=32, blank=True, verbose_name=_('Created by')) created_by = models.CharField(max_length=32, blank=True, verbose_name=_('Created by'))

View File

@ -5,6 +5,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import logging import logging
import uuid
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -15,6 +16,7 @@ logger = logging.getLogger(__name__)
class IDC(models.Model): class IDC(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
name = models.CharField(max_length=32, verbose_name=_('Name')) name = models.CharField(max_length=32, verbose_name=_('Name'))
bandwidth = models.CharField( bandwidth = models.CharField(
max_length=32, blank=True, verbose_name=_('Bandwidth')) max_length=32, blank=True, verbose_name=_('Bandwidth'))

View File

@ -5,6 +5,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import os import os
import logging import logging
import uuid
from hashlib import md5 from hashlib import md5
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
@ -31,6 +32,7 @@ class AdminUser(models.Model):
('sudo', 'sudo'), ('sudo', 'sudo'),
('su', 'su'), ('su', 'su'),
) )
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
name = models.CharField(max_length=128, unique=True, verbose_name=_('Name')) name = models.CharField(max_length=128, unique=True, verbose_name=_('Name'))
username = models.CharField(max_length=16, verbose_name=_('Username')) username = models.CharField(max_length=16, verbose_name=_('Username'))
_password = models.CharField( _password = models.CharField(
@ -131,6 +133,7 @@ class SystemUser(models.Model):
('P', 'Password'), ('P', 'Password'),
('K', 'Public key'), ('K', 'Public key'),
) )
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
name = models.CharField(max_length=128, unique=True, name = models.CharField(max_length=128, unique=True,
verbose_name=_('Name')) verbose_name=_('Name'))
username = models.CharField(max_length=16, verbose_name=_('Username')) username = models.CharField(max_length=16, verbose_name=_('Username'))

View File

@ -18,37 +18,37 @@ urlpatterns = [
url(r'^v1/assets-bulk/$', api.AssetListUpdateApi.as_view(), name='asset-bulk-update'), url(r'^v1/assets-bulk/$', api.AssetListUpdateApi.as_view(), name='asset-bulk-update'),
url(r'^v1/system-user/(?P<pk>[0-9]+)/auth-info/', api.SystemUserAuthInfoApi.as_view(), url(r'^v1/system-user/(?P<pk>[0-9]+)/auth-info/', api.SystemUserAuthInfoApi.as_view(),
name='system-user-auth-info'), name='system-user-auth-info'),
url(r'^v1/assets/(?P<pk>\d+)/groups/$', url(r'^v1/assets/(?P<pk>[0-9a-zA-Z\-]+)/groups/$',
api.AssetUpdateGroupApi.as_view(), name='asset-update-group'), api.AssetUpdateGroupApi.as_view(), name='asset-update-group'),
url(r'^v1/assets/(?P<pk>\d+)/refresh/$', url(r'^v1/assets/(?P<pk>[0-9a-zA-Z\-]+)/refresh/$',
api.AssetRefreshHardwareView.as_view(), name='asset-refresh'), api.AssetRefreshHardwareView.as_view(), name='asset-refresh'),
url(r'^v1/assets/(?P<pk>\d+)/admin-user-test/$', url(r'^v1/assets/(?P<pk>[0-9a-zA-Z\-]+)/admin-user-test/$',
api.AssetAdminUserTestView.as_view(), name='asset-admin-user-test'), api.AssetAdminUserTestView.as_view(), name='asset-admin-user-test'),
url(r'^v1/assets/(?P<pk>\d+)/system-users/$', url(r'^v1/assets/(?P<pk>[0-9a-zA-Z\-]+)/system-users/$',
api.SystemUserUpdateApi.as_view(), name='asset-update-system-users'), api.SystemUserUpdateApi.as_view(), name='asset-update-system-users'),
url(r'^v1/groups/(?P<pk>\d+)/push-system-user/$', url(r'^v1/groups/(?P<pk>[0-9a-zA-Z\-]+)/push-system-user/$',
api.AssetGroupPushSystemUserView.as_view(), name='asset-group-push-system-user'), api.AssetGroupPushSystemUserView.as_view(), name='asset-group-push-system-user'),
# update the system users, which add and delete the asset to the system user # update the system users, which add and delete the asset to the system user
url(r'^v1/system-user/(?P<pk>\d+)/assets/$', url(r'^v1/system-user/(?P<pk>[0-9a-zA-Z\-]+)/assets/$',
api.SystemUserUpdateAssetsApi.as_view(), name='systemuser-update-assets'), api.SystemUserUpdateAssetsApi.as_view(), name='systemuser-update-assets'),
url(r'^v1/system-user/(?P<pk>\d+)/groups/$', url(r'^v1/system-user/(?P<pk>[0-9a-zA-Z\-]+)/groups/$',
api.SystemUserUpdateAssetGroupApi.as_view(), name='systemuser-update-assetgroups'), api.SystemUserUpdateAssetGroupApi.as_view(), name='systemuser-update-assetgroups'),
# update the asset group, which add or delete the asset to the group # update the asset group, which add or delete the asset to the group
url(r'^v1/groups/(?P<pk>\d+)/assets/$', url(r'^v1/groups/(?P<pk>[0-9a-zA-Z\-]+)/assets/$',
api.AssetGroupUpdateApi.as_view(), name='asset-groups-update'), api.AssetGroupUpdateApi.as_view(), name='asset-groups-update'),
# update the asset group, and add or delete the system_user to the group # update the asset group, and add or delete the system_user to the group
url(r'^v1/groups/(?P<pk>\d+)/system-users/$', url(r'^v1/groups/(?P<pk>[0-9a-zA-Z\-]+)/system-users/$',
api.AssetGroupUpdateSystemUserApi.as_view(), name='asset-groups-update-systemusers'), api.AssetGroupUpdateSystemUserApi.as_view(), name='asset-groups-update-systemusers'),
# update the IDC, and add or delete the assets to the IDC # update the IDC, and add or delete the assets to the IDC
url(r'^v1/idc/(?P<pk>\d+)/assets/$', url(r'^v1/idc/(?P<pk>[0-9a-zA-Z\-]+)/assets/$',
api.IDCUpdateAssetsApi.as_view(), name='idc-update-assets'), api.IDCUpdateAssetsApi.as_view(), name='idc-update-assets'),
] ]

View File

@ -11,9 +11,9 @@ urlpatterns = [
url(r'^asset/create/$', views.AssetCreateView.as_view(), name='asset-create'), url(r'^asset/create/$', views.AssetCreateView.as_view(), name='asset-create'),
url(r'^asset/export/$', views.AssetExportView.as_view(), name='asset-export'), url(r'^asset/export/$', views.AssetExportView.as_view(), name='asset-export'),
url(r'^asset/import/$', views.BulkImportAssetView.as_view(), name='asset-import'), url(r'^asset/import/$', views.BulkImportAssetView.as_view(), name='asset-import'),
url(r'^asset/(?P<pk>[0-9]+)/$', views.AssetDetailView.as_view(), name='asset-detail'), url(r'^asset/(?P<pk>[0-9a-zA-Z\-]+)/$', views.AssetDetailView.as_view(), name='asset-detail'),
url(r'^asset/(?P<pk>[0-9]+)/update/$', views.AssetUpdateView.as_view(), name='asset-update'), url(r'^asset/(?P<pk>[0-9a-zA-Z\-]+)/update/$', views.AssetUpdateView.as_view(), name='asset-update'),
url(r'^asset/(?P<pk>[0-9]+)/delete/$', views.AssetDeleteView.as_view(), name='asset-delete'), url(r'^asset/(?P<pk>[0-9a-zA-Z\-]+)/delete/$', views.AssetDeleteView.as_view(), name='asset-delete'),
url(r'^asset-modal$', views.AssetModalListView.as_view(), name='asset-modal-list'), url(r'^asset-modal$', views.AssetModalListView.as_view(), name='asset-modal-list'),
url(r'^asset/update/$', views.AssetBulkUpdateView.as_view(), name='asset-bulk-update'), url(r'^asset/update/$', views.AssetBulkUpdateView.as_view(), name='asset-bulk-update'),
@ -23,33 +23,33 @@ urlpatterns = [
# Resource asset group url # Resource asset group url
url(r'^asset-group/$', views.AssetGroupListView.as_view(), name='asset-group-list'), url(r'^asset-group/$', views.AssetGroupListView.as_view(), name='asset-group-list'),
url(r'^asset-group/create/$', views.AssetGroupCreateView.as_view(), name='asset-group-create'), url(r'^asset-group/create/$', views.AssetGroupCreateView.as_view(), name='asset-group-create'),
url(r'^asset-group/(?P<pk>[0-9]+)/$', views.AssetGroupDetailView.as_view(), name='asset-group-detail'), url(r'^asset-group/(?P<pk>[0-9a-zA-Z\-]+)/$', views.AssetGroupDetailView.as_view(), name='asset-group-detail'),
url(r'^asset-group/(?P<pk>[0-9]+)/update/$', views.AssetGroupUpdateView.as_view(), name='asset-group-update'), url(r'^asset-group/(?P<pk>[0-9a-zA-Z\-]+)/update/$', views.AssetGroupUpdateView.as_view(), name='asset-group-update'),
url(r'^asset-group/(?P<pk>[0-9]+)/delete/$', views.AssetGroupDeleteView.as_view(), name='asset-group-delete'), url(r'^asset-group/(?P<pk>[0-9a-zA-Z\-]+)/delete/$', views.AssetGroupDeleteView.as_view(), name='asset-group-delete'),
# Resource idc url # Resource idc url
url(r'^idc/$', views.IDCListView.as_view(), name='idc-list'), url(r'^idc/$', views.IDCListView.as_view(), name='idc-list'),
url(r'^idc/create/$', views.IDCCreateView.as_view(), name='idc-create'), url(r'^idc/create/$', views.IDCCreateView.as_view(), name='idc-create'),
url(r'^idc/(?P<pk>[0-9]+)/$', views.IDCDetailView.as_view(), name='idc-detail'), url(r'^idc/(?P<pk>[0-9a-zA-Z\-]+)/$', views.IDCDetailView.as_view(), name='idc-detail'),
url(r'^idc/(?P<pk>[0-9]+)/update/', views.IDCUpdateView.as_view(), name='idc-update'), url(r'^idc/(?P<pk>[0-9a-zA-Z\-]+)/update/', views.IDCUpdateView.as_view(), name='idc-update'),
url(r'^idc/(?P<pk>[0-9]+)/delete/$', views.IDCDeleteView.as_view(), name='idc-delete'), url(r'^idc/(?P<pk>[0-9a-zA-Z\-]+)/delete/$', views.IDCDeleteView.as_view(), name='idc-delete'),
url(r'^idc/(?P<pk>[0-9]+)/assets/$', views.IDCAssetsView.as_view(), name='idc-assets'), url(r'^idc/(?P<pk>[0-9a-zA-Z\-]+)/assets/$', views.IDCAssetsView.as_view(), name='idc-assets'),
# Resource admin user url # Resource admin user url
url(r'^admin-user/$', views.AdminUserListView.as_view(), name='admin-user-list'), url(r'^admin-user/$', views.AdminUserListView.as_view(), name='admin-user-list'),
url(r'^admin-user/create/$', views.AdminUserCreateView.as_view(), name='admin-user-create'), url(r'^admin-user/create/$', views.AdminUserCreateView.as_view(), name='admin-user-create'),
url(r'^admin-user/(?P<pk>[0-9]+)/$', views.AdminUserDetailView.as_view(), name='admin-user-detail'), url(r'^admin-user/(?P<pk>[0-9a-zA-Z\-]+)/$', views.AdminUserDetailView.as_view(), name='admin-user-detail'),
url(r'^admin-user/(?P<pk>[0-9]+)/update/$', views.AdminUserUpdateView.as_view(), name='admin-user-update'), url(r'^admin-user/(?P<pk>[0-9a-zA-Z\-]+)/update/$', views.AdminUserUpdateView.as_view(), name='admin-user-update'),
url(r'^admin-user/(?P<pk>[0-9]+)/delete/$', views.AdminUserDeleteView.as_view(), name='admin-user-delete'), url(r'^admin-user/(?P<pk>[0-9a-zA-Z\-]+)/delete/$', views.AdminUserDeleteView.as_view(), name='admin-user-delete'),
# Resource system user url # Resource system user url
url(r'^system-user/$', views.SystemUserListView.as_view(), name='system-user-list'), url(r'^system-user/$', views.SystemUserListView.as_view(), name='system-user-list'),
url(r'^system-user/create/$', views.SystemUserCreateView.as_view(), name='system-user-create'), url(r'^system-user/create/$', views.SystemUserCreateView.as_view(), name='system-user-create'),
url(r'^system-user/(?P<pk>[0-9]+)/$', views.SystemUserDetailView.as_view(), name='system-user-detail'), url(r'^system-user/(?P<pk>[0-9a-zA-Z\-]+)/$', views.SystemUserDetailView.as_view(), name='system-user-detail'),
url(r'^system-user/(?P<pk>[0-9]+)/update/$', views.SystemUserUpdateView.as_view(), name='system-user-update'), url(r'^system-user/(?P<pk>[0-9a-zA-Z\-]+)/update/$', views.SystemUserUpdateView.as_view(), name='system-user-update'),
url(r'^system-user/(?P<pk>[0-9]+)/delete/$', views.SystemUserDeleteView.as_view(), name='system-user-delete'), url(r'^system-user/(?P<pk>[0-9a-zA-Z\-]+)/delete/$', views.SystemUserDeleteView.as_view(), name='system-user-delete'),
url(r'^system-user/(?P<pk>[0-9]+)/asset/$', views.SystemUserAssetView.as_view(), name='system-user-asset'), url(r'^system-user/(?P<pk>[0-9a-zA-Z\-]+)/asset/$', views.SystemUserAssetView.as_view(), name='system-user-asset'),
# url(r'^system-user/(?P<pk>[0-9]+)/asset-group$', views.SystemUserAssetGroupView.as_view(), # url(r'^system-user/(?P<pk>[0-9a-zA-Z\-]+)/asset-group$', views.SystemUserAssetGroupView.as_view(),
# name='system-user-asset-group'), # name='system-user-asset-group'),
] ]

View File

@ -3,6 +3,8 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import uuid
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -13,7 +15,7 @@ class LoginLog(models.Model):
('ST', 'SSH Terminal'), ('ST', 'SSH Terminal'),
('WT', 'Web Terminal') ('WT', 'Web Terminal')
) )
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
username = models.CharField(max_length=20, verbose_name=_('Username')) username = models.CharField(max_length=20, verbose_name=_('Username'))
name = models.CharField(max_length=20, blank=True, verbose_name=_('Name')) name = models.CharField(max_length=20, blank=True, verbose_name=_('Name'))
login_type = models.CharField(choices=LOGIN_TYPE_CHOICE, max_length=2, login_type = models.CharField(choices=LOGIN_TYPE_CHOICE, max_length=2,
@ -37,6 +39,7 @@ class ProxyLog(models.Model):
('WT', 'Web Terminal'), ('WT', 'Web Terminal'),
) )
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
user = models.CharField(max_length=32, verbose_name=_('User')) user = models.CharField(max_length=32, verbose_name=_('User'))
asset = models.CharField(max_length=32, verbose_name=_('Asset')) asset = models.CharField(max_length=32, verbose_name=_('Asset'))
system_user = models.CharField(max_length=32, verbose_name=_('System user')) system_user = models.CharField(max_length=32, verbose_name=_('System user'))
@ -66,6 +69,7 @@ class ProxyLog(models.Model):
class CommandLog(models.Model): class CommandLog(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
proxy_log_id = models.IntegerField(db_index=True) proxy_log_id = models.IntegerField(db_index=True)
user = models.CharField(max_length=48, db_index=True) user = models.CharField(max_length=48, db_index=True)
asset = models.CharField(max_length=128, db_index=True) asset = models.CharField(max_length=128, db_index=True)
@ -83,6 +87,7 @@ class CommandLog(models.Model):
class RecordLog(models.Model): class RecordLog(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
proxy_log_id = models.IntegerField(db_index=True) proxy_log_id = models.IntegerField(db_index=True)
output = models.TextField(verbose_name=_('Output')) output = models.TextField(verbose_name=_('Output'))
timestamp = models.FloatField(db_index=True) timestamp = models.FloatField(db_index=True)

View File

@ -8,7 +8,7 @@ urlpatterns = [
name='proxy-log-offline-list'), name='proxy-log-offline-list'),
url(r'^proxy-log-online/$', views.ProxyLogOnlineListView.as_view(), url(r'^proxy-log-online/$', views.ProxyLogOnlineListView.as_view(),
name='proxy-log-online-list'), name='proxy-log-online-list'),
url(r'^proxy-log/(?P<pk>\d+)/$', views.ProxyLogDetailView.as_view(), url(r'^proxy-log/(?P<pk>[0-9a-zA-Z\-]+)/$', views.ProxyLogDetailView.as_view(),
name='proxy-log-detail'), name='proxy-log-detail'),
url(r'^command-log/$', views.CommandLogListView.as_view(), url(r'^command-log/$', views.CommandLogListView.as_view(),
name='command-log-list'), name='command-log-list'),

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
[{"model": "users.usergroup", "pk": 1, "fields": {"is_discard": false, "discard_time": null, "name": "Default", "comment": "Default user group", "date_created": "2017-04-04T01:59:21.128Z", "created_by": "System"}}, {"model": "assets.idc", "pk": 1, "fields": {"name": "Default", "bandwidth": "", "contact": "", "phone": "", "address": "", "intranet": "", "extranet": "", "date_created": "2017-04-04T01:59:21.140Z", "operator": "", "created_by": "System", "comment": "Default IDC"}}, {"model": "assets.assetgroup", "pk": 1, "fields": {"name": "Default", "created_by": "", "date_created": "2017-04-04T01:59:21.142Z", "comment": "Default asset group", "system_users": []}}, {"model": "users.user", "pk": 1, "fields": {"password": "pbkdf2_sha256$30000$f8HLJLRwydBR$M+X1huSgQOojfaG01SGNBYPOlbYnHHw/A4/RdcSBEQQ=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2017-04-04T01:59:20.932Z", "username": "admin", "name": "Administrator", "email": "admin@jumpserver.org", "role": "Admin", "avatar": "", "wechat": "", "phone": null, "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Administrator is the super user of system", "is_first_login": false, "date_expired": "2087-03-18T01:59:20.932Z", "created_by": "System", "user_permissions": [], "groups": [1]}}] [{"model": "users.usergroup", "pk": "0460a32e-59c9-42cc-81a5-7e0a13fc0085", "fields": {"is_discard": false, "discard_time": null, "name": "Default", "comment": "Default user group", "date_created": "2017-11-23T03:59:09.875Z", "created_by": "System"}}, {"model": "assets.idc", "pk": "937922e3-e2b7-42aa-b460-6b276901f53a", "fields": {"name": "Default", "bandwidth": "", "contact": "", "phone": "", "address": "", "intranet": "", "extranet": "", "date_created": "2017-11-23T03:59:09.882Z", "operator": "", "created_by": "System", "comment": "Default IDC"}}, {"model": "assets.assetgroup", "pk": "f758dc94-b979-4edf-9afc-f9171f9d2d6a", "fields": {"name": "Default", "created_by": "", "date_created": "2017-11-23T03:59:09.883Z", "comment": "Default asset group", "system_users": []}}, {"model": "users.user", "pk": "bb318c48-4f50-483e-a165-89d7f18e9e95", "fields": {"password": "pbkdf2_sha256$36000$kHqN5uCVaAk9$SXWzKLwBg68/2W8NLSNJIaVBJc60F26p8RO9E3oSskI=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2017-11-23T03:59:09.828Z", "username": "admin", "name": "Administrator", "email": "admin@jumpserver.org", "role": "Admin", "avatar": "", "wechat": "", "phone": null, "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Administrator is the super user of system", "is_first_login": false, "date_expired": "2087-11-06T03:59:09.829Z", "created_by": "System", "user_permissions": [], "groups": ["0460a32e-59c9-42cc-81a5-7e0a13fc0085"]}}]

View File

@ -1,9 +1,9 @@
# ~*~ coding: utf-8 ~*~ # ~*~ coding: utf-8 ~*~
from __future__ import unicode_literals, absolute_import
import logging import logging
from collections import OrderedDict from collections import OrderedDict
import json import json
import uuid
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -16,7 +16,7 @@ logger = logging.getLogger(__name__)
class Task(models.Model): class Task(models.Model):
uuid = models.CharField(max_length=128, verbose_name=_('UUID'), primary_key=True) uuid = models.UUIDField(default=uuid.uuid4, primary_key=True)
name = models.CharField(max_length=128, blank=True, verbose_name=_('Name')) name = models.CharField(max_length=128, blank=True, verbose_name=_('Name'))
date_start = models.DateTimeField(auto_now_add=True, verbose_name=_('Start time')) date_start = models.DateTimeField(auto_now_add=True, verbose_name=_('Start time'))
date_finished = models.DateTimeField(blank=True, null=True, verbose_name=_('End time')) date_finished = models.DateTimeField(blank=True, null=True, verbose_name=_('End time'))

View File

@ -10,6 +10,6 @@ __all__ = ["urlpatterns"]
urlpatterns = [ urlpatterns = [
# TResource Task url # TResource Task url
url(r'^task/$', views.TaskListView.as_view(), name='task-list'), url(r'^task/$', views.TaskListView.as_view(), name='task-list'),
url(r'^task/(?P<pk>[0-9a-zA-Z-]+)/$', views.TaskDetailView.as_view(), name='task-detail'), url(r'^task/(?P<pk>[0-9a-zA-Z\-]+)/$', views.TaskDetailView.as_view(), name='task-detail'),
url(r'^task/(?P<pk>[0-9a-zA-Z-]+)/run/$', views.TaskRunView.as_view(), name='task-run'), url(r'^task/(?P<pk>[0-9a-zA-Z\-]+)/run/$', views.TaskRunView.as_view(), name='task-run'),
] ]

View File

@ -1,5 +1,6 @@
from __future__ import unicode_literals, absolute_import from __future__ import unicode_literals, absolute_import
import functools import functools
import uuid
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -17,6 +18,7 @@ class AssetPermission(models.Model):
# ('U', 'user'), # ('U', 'user'),
# ('G', 'user group'), # ('G', 'user group'),
# ) # )
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
name = models.CharField( name = models.CharField(
max_length=128, unique=True, verbose_name=_('Name')) max_length=128, unique=True, verbose_name=_('Name'))
users = models.ManyToManyField( users = models.ManyToManyField(

View File

@ -13,35 +13,27 @@ router.register('v1/asset-permissions',
urlpatterns = [ urlpatterns = [
# 用户可以使用自己的Token或其它认证查看自己授权的资产,资产组等 # 用户可以使用自己的Token或其它认证查看自己授权的资产,资产组等
url(r'^v1/user/my/assets/$', url(r'^v1/user/my/assets/$', api.MyGrantedAssetsApi.as_view(), name='my-assets'),
api.MyGrantedAssetsApi.as_view(), url(r'^v1/user/my/asset-groups/$', api.MyGrantedAssetGroupsApi.as_view(), name='my-asset-groups'),
name='my-assets'), url(r'^v1/user/my/asset-groups-assets/$', api.MyGrantedAssetGroupsWithAssetsApi.as_view(), name='my-asset-group-assets'),
url(r'^v1/user/my/asset-groups/$', url(r'^v1/user/my/asset-group/(?P<pk>[0-9a-zA-Z\-]+)/assets/$', api.MyAssetGroupOfAssetsApi.as_view(), name='my-asset-group-of-assets'),
api.MyGrantedAssetGroupsApi.as_view(),
name='my-asset-groups'),
url(r'^v1/user/my/asset-groups-assets/$',
api.MyGrantedAssetGroupsWithAssetsApi.as_view(),
name='my-asset-group-assets'),
url(r'^v1/user/my/asset-group/(?P<pk>[0-9]+)/assets/$',
api.MyAssetGroupOfAssetsApi.as_view(),
name='my-asset-group-of-assets'),
# 查询某个用户授权的资产和资产组 # 查询某个用户授权的资产和资产组
url(r'^v1/user/(?P<pk>[0-9]+)/assets/$', url(r'^v1/user/(?P<pk>[0-9a-zA-Z\-]+)/assets/$',
api.UserGrantedAssetsApi.as_view(), api.UserGrantedAssetsApi.as_view(),
name='user-assets'), name='user-assets'),
url(r'^v1/user/(?P<pk>[0-9]+)/asset-groups/$', url(r'^v1/user/(?P<pk>[0-9a-zA-Z\-]+)/asset-groups/$',
api.UserGrantedAssetGroupsApi.as_view(), api.UserGrantedAssetGroupsApi.as_view(),
name='user-asset-groups'), name='user-asset-groups'),
url(r'^v1/user/(?P<pk>[0-9]+)/asset-groups-assets/$', url(r'^v1/user/(?P<pk>[0-9a-zA-Z\-]+)/asset-groups-assets/$',
api.UserGrantedAssetGroupsWithAssetsApi.as_view(), api.UserGrantedAssetGroupsWithAssetsApi.as_view(),
name='user-asset-groups'), name='user-asset-groups'),
# 查询某个用户组授权的资产和资产组 # 查询某个用户组授权的资产和资产组
url(r'^v1/user-group/(?P<pk>[0-9]+)/assets/$', url(r'^v1/user-group/(?P<pk>[0-9a-zA-Z\-]+)/assets/$',
api.UserGroupGrantedAssetsApi.as_view(), api.UserGroupGrantedAssetsApi.as_view(),
name='user-group-assets'), name='user-group-assets'),
url(r'^v1/user-group/(?P<pk>[0-9]+)/asset-groups/$', url(r'^v1/user-group/(?P<pk>[0-9a-zA-Z\-]+)/asset-groups/$',
api.UserGroupGrantedAssetGroupsApi.as_view(), api.UserGroupGrantedAssetGroupsApi.as_view(),
name='user-group-asset-groups'), name='user-group-asset-groups'),
@ -59,7 +51,7 @@ urlpatterns = [
name='validate-user-asset-permission'), name='validate-user-asset-permission'),
# 删除asset permission中的某个系统用户 # 删除asset permission中的某个系统用户
url(r'^v1/asset-permissions/(?P<pk>[0-9]+)/system-user/remove/$', url(r'^v1/asset-permissions/(?P<pk>[0-9a-zA-Z\-]+)/system-user/remove/$',
api.RemoveSystemUserAssetPermission.as_view(), api.RemoveSystemUserAssetPermission.as_view(),
name='remove-system-user-asset-permission'), name='remove-system-user-asset-permission'),
] ]

View File

@ -8,16 +8,11 @@ app_name = 'perms'
urlpatterns = [ urlpatterns = [
url(r'^asset-permission$', views.AssetPermissionListView.as_view(), name='asset-permission-list'), url(r'^asset-permission$', views.AssetPermissionListView.as_view(), name='asset-permission-list'),
url(r'^asset-permission/create$', views.AssetPermissionCreateView.as_view(), name='asset-permission-create'), url(r'^asset-permission/create$', views.AssetPermissionCreateView.as_view(), name='asset-permission-create'),
url(r'^asset-permission/(?P<pk>[0-9]+)/update$', views.AssetPermissionUpdateView.as_view(), url(r'^asset-permission/(?P<pk>[0-9a-zA-Z\-]+)/update$', views.AssetPermissionUpdateView.as_view(), name='asset-permission-update'),
name='asset-permission-update'), url(r'^asset-permission/(?P<pk>[0-9a-zA-Z\-]+)$', views.AssetPermissionDetailView.as_view(),name='asset-permission-detail'),
url(r'^asset-permission/(?P<pk>[0-9]+)$', views.AssetPermissionDetailView.as_view(), url(r'^asset-permission/(?P<pk>[0-9a-zA-Z\-]+)/delete$', views.AssetPermissionDeleteView.as_view(), name='asset-permission-delete'),
name='asset-permission-detail'), url(r'^asset-permission/(?P<pk>[0-9a-zA-Z\-]+)/user$', views.AssetPermissionUserView.as_view(), name='asset-permission-user-list'),
url(r'^asset-permission/(?P<pk>[0-9]+)/delete$', views.AssetPermissionDeleteView.as_view(), url(r'^asset-permission/(?P<pk>[0-9a-zA-Z\-]+)/asset$', views.AssetPermissionAssetView.as_view(), name='asset-permission-asset-list'),
name='asset-permission-delete'),
url(r'^asset-permission/(?P<pk>[0-9]+)/user$', views.AssetPermissionUserView.as_view(),
name='asset-permission-user-list'),
url(r'^asset-permission/(?P<pk>[0-9]+)/asset$', views.AssetPermissionAssetView.as_view(),
name='asset-permission-asset-list'),
] ]

View File

@ -4,6 +4,8 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import uuid
from django.db import models, IntegrityError from django.db import models, IntegrityError
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -15,6 +17,7 @@ __all__ = ['UserGroup']
class UserGroup(NoDeleteModelMixin): class UserGroup(NoDeleteModelMixin):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
name = models.CharField(max_length=128, verbose_name=_('Name')) name = models.CharField(max_length=128, verbose_name=_('Name'))
comment = models.TextField(blank=True, verbose_name=_('Comment')) comment = models.TextField(blank=True, verbose_name=_('Comment'))
date_created = models.DateTimeField(auto_now_add=True, null=True, date_created = models.DateTimeField(auto_now_add=True, null=True,

View File

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
import os import os
import uuid
from collections import OrderedDict from collections import OrderedDict
from django.conf import settings from django.conf import settings
@ -27,7 +27,7 @@ class User(AbstractUser):
('User', 'User'), ('User', 'User'),
('App', 'Application') ('App', 'Application')
) )
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
username = models.CharField(max_length=20, unique=True, verbose_name=_('Username')) username = models.CharField(max_length=20, unique=True, verbose_name=_('Username'))
name = models.CharField(max_length=20, verbose_name=_('Name')) name = models.CharField(max_length=20, verbose_name=_('Name'))
email = models.EmailField(max_length=30, unique=True, verbose_name=_('Email')) email = models.EmailField(max_length=30, unique=True, verbose_name=_('Email'))
@ -234,7 +234,7 @@ class User(AbstractUser):
self.set_password(new_password) self.set_password(new_password)
self.save() self.save()
def delete(self): def delete(self, using=None, keep_parents=False):
if self.pk == 1 or self.username == 'admin': if self.pk == 1 or self.username == 'admin':
return return
return super(User, self).delete() return super(User, self).delete()
@ -267,7 +267,7 @@ class User(AbstractUser):
email=forgery_py.internet.email_address(), email=forgery_py.internet.email_address(),
name=forgery_py.name.full_name(), name=forgery_py.name.full_name(),
password=make_password(forgery_py.lorem_ipsum.word()), password=make_password(forgery_py.lorem_ipsum.word()),
role=choice(dict(User.ROLE_CHOICES).keys()), role=choice(list(dict(User.ROLE_CHOICES).keys())),
wechat=forgery_py.internet.user_name(True), wechat=forgery_py.internet.user_name(True),
comment=forgery_py.lorem_ipsum.sentence(), comment=forgery_py.lorem_ipsum.sentence(),
created_by=choice(cls.objects.all()).username) created_by=choice(cls.objects.all()).username)

View File

@ -19,15 +19,15 @@ urlpatterns = [
url(r'^v1/token/$', api.UserToken.as_view(), name='user-token'), url(r'^v1/token/$', api.UserToken.as_view(), name='user-token'),
url(r'^v1/profile/$', api.UserProfile.as_view(), name='user-profile'), url(r'^v1/profile/$', api.UserProfile.as_view(), name='user-profile'),
url(r'^v1/auth/$', api.UserAuthApi.as_view(), name='user-auth'), url(r'^v1/auth/$', api.UserAuthApi.as_view(), name='user-auth'),
url(r'^v1/users/(?P<pk>\d+)/password/reset/$', url(r'^v1/users/(?P<pk>[0-9a-zA-Z\-]+)/password/reset/$',
api.UserResetPasswordApi.as_view(), name='user-reset-password'), api.UserResetPasswordApi.as_view(), name='user-reset-password'),
url(r'^v1/users/(?P<pk>\d+)/pubkey/reset/$', url(r'^v1/users/(?P<pk>[0-9a-zA-Z\-]+)/pubkey/reset/$',
api.UserResetPKApi.as_view(), name='user-public-key-reset'), api.UserResetPKApi.as_view(), name='user-public-key-reset'),
url(r'^v1/users/(?P<pk>\d+)/pubkey/update/$', url(r'^v1/users/(?P<pk>[0-9a-zA-Z\-]+)/pubkey/update/$',
api.UserUpdatePKApi.as_view(), name='user-public-key-update'), api.UserUpdatePKApi.as_view(), name='user-public-key-update'),
url(r'^v1/users/(?P<pk>\d+)/groups/$', url(r'^v1/users/(?P<pk>[0-9a-zA-Z\-]+)/groups/$',
api.UserUpdateGroupApi.as_view(), name='user-update-group'), api.UserUpdateGroupApi.as_view(), name='user-update-group'),
url(r'^v1/groups/(?P<pk>\d+)/users/$', url(r'^v1/groups/(?P<pk>[0-9a-zA-Z\-]+)/users/$',
api.UserGroupUpdateUserApi.as_view(), name='user-group-update-user'), api.UserGroupUpdateUserApi.as_view(), name='user-group-update-user'),
] ]

View File

@ -34,18 +34,18 @@ urlpatterns = [
# User view # User view
url(r'^user$', views.UserListView.as_view(), name='user-list'), url(r'^user$', views.UserListView.as_view(), name='user-list'),
url(r'^user/(?P<pk>[0-9]+)$', views.UserDetailView.as_view(), url(r'^user/(?P<pk>[0-9a-zA-Z\-]+)$', views.UserDetailView.as_view(),
name='user-detail'), name='user-detail'),
url(r'^user/(?P<pk>[0-9]+)/asset-permission$', url(r'^user/(?P<pk>[0-9a-zA-Z\-]+)/asset-permission$',
views.UserAssetPermissionView.as_view(), views.UserAssetPermissionView.as_view(),
name='user-asset-permission'), name='user-asset-permission'),
url(r'^user/(?P<pk>[0-9]+)/asset-permission/create$', url(r'^user/(?P<pk>[0-9a-zA-Z\-]+)/asset-permission/create$',
views.UserAssetPermissionCreateView.as_view(), views.UserAssetPermissionCreateView.as_view(),
name='user-asset-permission-create'), name='user-asset-permission-create'),
url(r'^user/(?P<pk>[0-9]+)/assets', url(r'^user/(?P<pk>[0-9a-zA-Z\-]+)/assets',
views.UserGrantedAssetView.as_view(), views.UserGrantedAssetView.as_view(),
name='user-granted-asset'), name='user-granted-asset'),
url(r'^user/(?P<pk>[0-9]+)/login-history', views.UserDetailView.as_view(), url(r'^user/(?P<pk>[0-9a-zA-Z\-]+)/login-history', views.UserDetailView.as_view(),
name='user-login-history'), name='user-login-history'),
url(r'^user/export/', views.UserExportView.as_view(), url(r'^user/export/', views.UserExportView.as_view(),
name='user-export'), name='user-export'),
@ -55,7 +55,7 @@ urlpatterns = [
name='user-import'), name='user-import'),
url(r'^user/create$', views.UserCreateView.as_view(), url(r'^user/create$', views.UserCreateView.as_view(),
name='user-create'), name='user-create'),
url(r'^user/(?P<pk>[0-9]+)/update$', views.UserUpdateView.as_view(), url(r'^user/(?P<pk>[0-9a-zA-Z\-]+)/update$', views.UserUpdateView.as_view(),
name='user-update'), name='user-update'),
url(r'^user/update$', views.UserBulkUpdateView.as_view(), url(r'^user/update$', views.UserBulkUpdateView.as_view(),
name='user-bulk-update'), name='user-bulk-update'),
@ -63,19 +63,19 @@ urlpatterns = [
# User group view # User group view
url(r'^user-group$', views.UserGroupListView.as_view(), url(r'^user-group$', views.UserGroupListView.as_view(),
name='user-group-list'), name='user-group-list'),
url(r'^user-group/(?P<pk>[0-9]+)$', views.UserGroupDetailView.as_view(), url(r'^user-group/(?P<pk>[0-9a-zA-Z\-]+)$', views.UserGroupDetailView.as_view(),
name='user-group-detail'), name='user-group-detail'),
url(r'^user-group/create$', views.UserGroupCreateView.as_view(), url(r'^user-group/create$', views.UserGroupCreateView.as_view(),
name='user-group-create'), name='user-group-create'),
url(r'^user-group/(?P<pk>[0-9]+)/update$', views.UserGroupUpdateView.as_view(), url(r'^user-group/(?P<pk>[0-9a-zA-Z\-]+)/update$', views.UserGroupUpdateView.as_view(),
name='user-group-update'), name='user-group-update'),
url(r'^user-group/(?P<pk>[0-9]+)/asset-permission$', url(r'^user-group/(?P<pk>[0-9a-zA-Z\-]+)/asset-permission$',
views.UserGroupAssetPermissionView.as_view(), views.UserGroupAssetPermissionView.as_view(),
name='user-group-asset-permission'), name='user-group-asset-permission'),
url(r'^user-group/(?P<pk>[0-9]+)/asset-permission/create$', url(r'^user-group/(?P<pk>[0-9a-zA-Z\-]+)/asset-permission/create$',
views.UserGroupAssetPermissionCreateView.as_view(), views.UserGroupAssetPermissionCreateView.as_view(),
name='user-group-asset-permission-create'), name='user-group-asset-permission-create'),
url(r'^user-group/(?P<pk>[0-9]+)/assets', url(r'^user-group/(?P<pk>[0-9a-zA-Z\-]+)/assets',
views.UserGroupGrantedAssetView.as_view(), views.UserGroupGrantedAssetView.as_view(),
name='user-group-granted-asset'), name='user-group-granted-asset'),
] ]