mirror of https://github.com/jumpserver/jumpserver
fit2cloud-fengyi
7 years ago
23 changed files with 32 additions and 1398 deletions
@ -1,168 +0,0 @@
|
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11 on 2017-12-21 16:06 |
||||
from __future__ import unicode_literals |
||||
|
||||
import assets.models.utils |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
import uuid |
||||
|
||||
|
||||
def add_default_group(apps, schema_editor): |
||||
group_model = apps.get_model("assets", "AssetGroup") |
||||
db_alias = schema_editor.connection.alias |
||||
group_model.objects.using(db_alias).create( |
||||
name="Default" |
||||
) |
||||
|
||||
|
||||
def add_default_cluster(apps, schema_editor): |
||||
cluster_model = apps.get_model("assets", "Cluster") |
||||
db_alias = schema_editor.connection.alias |
||||
cluster_model.objects.using(db_alias).create( |
||||
name="Default" |
||||
) |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='AdminUser', |
||||
fields=[ |
||||
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), |
||||
('name', models.CharField(max_length=128, unique=True, verbose_name='Name')), |
||||
('username', models.CharField(max_length=16, verbose_name='Username')), |
||||
('_password', models.CharField(blank=True, max_length=256, null=True, verbose_name='Password')), |
||||
('_private_key', models.TextField(blank=True, max_length=4096, null=True, validators=[assets.models.utils.private_key_validator], verbose_name='SSH private key')), |
||||
('_public_key', models.TextField(blank=True, max_length=4096, verbose_name='SSH public key')), |
||||
('comment', models.TextField(blank=True, verbose_name='Comment')), |
||||
('date_created', models.DateTimeField(auto_now_add=True)), |
||||
('date_updated', models.DateTimeField(auto_now=True)), |
||||
('created_by', models.CharField(max_length=32, null=True, verbose_name='Created by')), |
||||
('become', models.BooleanField(default=True)), |
||||
('become_method', models.CharField(choices=[('sudo', 'sudo'), ('su', 'su')], default='sudo', max_length=4)), |
||||
('become_user', models.CharField(default='root', max_length=64)), |
||||
('_become_pass', models.CharField(default='', max_length=128)), |
||||
], |
||||
options={ |
||||
'ordering': ['name'], |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Asset', |
||||
fields=[ |
||||
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), |
||||
('ip', models.GenericIPAddressField(db_index=True, verbose_name='IP')), |
||||
('hostname', models.CharField(max_length=128, unique=True, verbose_name='Hostname')), |
||||
('port', models.IntegerField(default=22, verbose_name='Port')), |
||||
('is_active', models.BooleanField(default=True, verbose_name='Is active')), |
||||
('type', models.CharField(blank=True, choices=[('Server', 'Server'), ('VM', 'VM'), ('Switch', 'Switch'), ('Router', 'Router'), ('Firewall', 'Firewall'), ('Storage', 'Storage')], default='Server', max_length=16, null=True, verbose_name='Asset type')), |
||||
('env', models.CharField(blank=True, choices=[('Prod', 'Production'), ('Dev', 'Development'), ('Test', 'Testing')], default='Prod', max_length=8, null=True, verbose_name='Asset environment')), |
||||
('status', models.CharField(blank=True, choices=[('In use', 'In use'), ('Out of use', 'Out of use')], default='In use', max_length=12, null=True, verbose_name='Asset status')), |
||||
('public_ip', models.GenericIPAddressField(blank=True, null=True, verbose_name='Public IP')), |
||||
('remote_card_ip', models.CharField(blank=True, max_length=16, null=True, verbose_name='Remote control card IP')), |
||||
('cabinet_no', models.CharField(blank=True, max_length=32, null=True, verbose_name='Cabinet number')), |
||||
('cabinet_pos', models.IntegerField(blank=True, null=True, verbose_name='Cabinet position')), |
||||
('number', models.CharField(blank=True, max_length=32, null=True, verbose_name='Asset number')), |
||||
('vendor', models.CharField(blank=True, max_length=64, null=True, verbose_name='Vendor')), |
||||
('model', models.CharField(blank=True, max_length=54, null=True, verbose_name='Model')), |
||||
('sn', models.CharField(blank=True, max_length=128, null=True, verbose_name='Serial number')), |
||||
('cpu_model', models.CharField(blank=True, max_length=64, null=True, verbose_name='CPU model')), |
||||
('cpu_count', models.IntegerField(null=True, verbose_name='CPU count')), |
||||
('cpu_cores', models.IntegerField(null=True, verbose_name='CPU cores')), |
||||
('memory', models.CharField(blank=True, max_length=64, null=True, verbose_name='Memory')), |
||||
('disk_total', models.CharField(blank=True, max_length=1024, null=True, verbose_name='Disk total')), |
||||
('disk_info', models.CharField(blank=True, max_length=1024, null=True, verbose_name='Disk info')), |
||||
('platform', models.CharField(blank=True, max_length=128, null=True, verbose_name='Platform')), |
||||
('os', models.CharField(blank=True, max_length=128, null=True, verbose_name='OS')), |
||||
('os_version', models.CharField(blank=True, max_length=16, null=True, verbose_name='OS version')), |
||||
('os_arch', models.CharField(blank=True, max_length=16, null=True, verbose_name='OS arch')), |
||||
('hostname_raw', models.CharField(blank=True, max_length=128, null=True, verbose_name='Hostname raw')), |
||||
('created_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Created by')), |
||||
('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')), |
||||
('comment', models.TextField(blank=True, default='', max_length=128, verbose_name='Comment')), |
||||
('admin_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='assets.AdminUser', verbose_name='Admin user')), |
||||
], |
||||
), |
||||
migrations.CreateModel( |
||||
name='AssetGroup', |
||||
fields=[ |
||||
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), |
||||
('name', models.CharField(max_length=64, unique=True, verbose_name='Name')), |
||||
('created_by', models.CharField(blank=True, max_length=32, verbose_name='Created by')), |
||||
('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')), |
||||
('comment', models.TextField(blank=True, verbose_name='Comment')), |
||||
], |
||||
options={ |
||||
'ordering': ['name'], |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Cluster', |
||||
fields=[ |
||||
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), |
||||
('name', models.CharField(max_length=32, verbose_name='Name')), |
||||
('bandwidth', models.CharField(blank=True, max_length=32, verbose_name='Bandwidth')), |
||||
('contact', models.CharField(blank=True, max_length=128, verbose_name='Contact')), |
||||
('phone', models.CharField(blank=True, max_length=32, verbose_name='Phone')), |
||||
('address', models.CharField(blank=True, max_length=128, verbose_name='Address')), |
||||
('intranet', models.TextField(blank=True, verbose_name='Intranet')), |
||||
('extranet', models.TextField(blank=True, verbose_name='Extranet')), |
||||
('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')), |
||||
('operator', models.CharField(blank=True, max_length=32, verbose_name='Operator')), |
||||
('created_by', models.CharField(blank=True, max_length=32, verbose_name='Created by')), |
||||
('comment', models.TextField(blank=True, verbose_name='Comment')), |
||||
('admin_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='assets.AdminUser', verbose_name='Admin user')), |
||||
], |
||||
options={ |
||||
'ordering': ['name'], |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='SystemUser', |
||||
fields=[ |
||||
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), |
||||
('name', models.CharField(max_length=128, unique=True, verbose_name='Name')), |
||||
('username', models.CharField(max_length=16, verbose_name='Username')), |
||||
('_password', models.CharField(blank=True, max_length=256, null=True, verbose_name='Password')), |
||||
('_private_key', models.TextField(blank=True, max_length=4096, null=True, validators=[assets.models.utils.private_key_validator], verbose_name='SSH private key')), |
||||
('_public_key', models.TextField(blank=True, max_length=4096, verbose_name='SSH public key')), |
||||
('comment', models.TextField(blank=True, verbose_name='Comment')), |
||||
('date_created', models.DateTimeField(auto_now_add=True)), |
||||
('date_updated', models.DateTimeField(auto_now=True)), |
||||
('created_by', models.CharField(max_length=32, null=True, verbose_name='Created by')), |
||||
('priority', models.IntegerField(default=10, verbose_name='Priority')), |
||||
('protocol', models.CharField(choices=[('ssh', 'ssh')], default='ssh', max_length=16, verbose_name='Protocol')), |
||||
('auto_push', models.BooleanField(default=True, verbose_name='Auto push')), |
||||
('sudo', models.TextField(default='/sbin/ifconfig', verbose_name='Sudo')), |
||||
('shell', models.CharField(default='/bin/bash', max_length=64, verbose_name='Shell')), |
||||
('cluster', models.ManyToManyField(blank=True, to='assets.Cluster', verbose_name='Cluster')), |
||||
], |
||||
options={ |
||||
'ordering': ['name'], |
||||
}, |
||||
), |
||||
migrations.AddField( |
||||
model_name='asset', |
||||
name='cluster', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='assets', to='assets.Cluster', verbose_name='Cluster'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='asset', |
||||
name='groups', |
||||
field=models.ManyToManyField(blank=True, related_name='assets', to='assets.AssetGroup', verbose_name='Asset groups'), |
||||
), |
||||
migrations.AlterUniqueTogether( |
||||
name='asset', |
||||
unique_together=set([('ip', 'port')]), |
||||
), |
||||
|
||||
migrations.RunPython(add_default_cluster), |
||||
migrations.RunPython(add_default_group), |
||||
] |
@ -1,84 +0,0 @@
|
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11 on 2017-12-24 15:21 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
import uuid |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='AdHoc', |
||||
fields=[ |
||||
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), |
||||
('_tasks', models.TextField(verbose_name='Tasks')), |
||||
('pattern', models.CharField(default='{}', max_length=64, verbose_name='Pattern')), |
||||
('_options', models.CharField(default='', max_length=1024, verbose_name='Options')), |
||||
('_hosts', models.TextField(blank=True, verbose_name='Hosts')), |
||||
('run_as_admin', models.BooleanField(default=False, verbose_name='Run as admin')), |
||||
('run_as', models.CharField(default='', max_length=128, verbose_name='Run as')), |
||||
('_become', models.CharField(default='', max_length=1024, verbose_name='Become')), |
||||
('created_by', models.CharField(default='', max_length=64, null=True, verbose_name='Create by')), |
||||
('date_created', models.DateTimeField(auto_now_add=True)), |
||||
], |
||||
options={ |
||||
'db_table': 'ops_adhoc', |
||||
'get_latest_by': 'date_created', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='AdHocRunHistory', |
||||
fields=[ |
||||
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), |
||||
('date_start', models.DateTimeField(auto_now_add=True, verbose_name='Start time')), |
||||
('date_finished', models.DateTimeField(blank=True, null=True, verbose_name='End time')), |
||||
('timedelta', models.FloatField(default=0.0, null=True, verbose_name='Time')), |
||||
('is_finished', models.BooleanField(default=False, verbose_name='Is finished')), |
||||
('is_success', models.BooleanField(default=False, verbose_name='Is success')), |
||||
('_result', models.TextField(blank=True, null=True, verbose_name='Adhoc raw result')), |
||||
('_summary', models.TextField(blank=True, null=True, verbose_name='Adhoc result summary')), |
||||
('adhoc', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='history', to='ops.AdHoc')), |
||||
], |
||||
options={ |
||||
'db_table': 'ops_adhoc_history', |
||||
'get_latest_by': 'date_start', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Task', |
||||
fields=[ |
||||
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), |
||||
('name', models.CharField(max_length=128, unique=True, verbose_name='Name')), |
||||
('interval', models.IntegerField(blank=True, help_text='Units: seconds', null=True, verbose_name='Interval')), |
||||
('crontab', models.CharField(blank=True, help_text='5 * * * *', max_length=128, null=True, verbose_name='Crontab')), |
||||
('is_periodic', models.BooleanField(default=False)), |
||||
('callback', models.CharField(blank=True, max_length=128, null=True, verbose_name='Callback')), |
||||
('is_deleted', models.BooleanField(default=False)), |
||||
('comment', models.TextField(blank=True, verbose_name='Comment')), |
||||
('created_by', models.CharField(blank=True, default='', max_length=128, null=True)), |
||||
('date_created', models.DateTimeField(auto_now_add=True)), |
||||
], |
||||
options={ |
||||
'db_table': 'ops_task', |
||||
'get_latest_by': 'date_created', |
||||
}, |
||||
), |
||||
migrations.AddField( |
||||
model_name='adhocrunhistory', |
||||
name='task', |
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='history', to='ops.Task'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='adhoc', |
||||
name='task', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='adhoc', to='ops.Task'), |
||||
), |
||||
] |
@ -1,34 +0,0 @@
|
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11 on 2017-12-24 15:21 |
||||
from __future__ import unicode_literals |
||||
|
||||
import common.utils |
||||
from django.db import migrations, models |
||||
import uuid |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
('assets', '0001_initial'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='AssetPermission', |
||||
fields=[ |
||||
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), |
||||
('name', models.CharField(max_length=128, unique=True, verbose_name='Name')), |
||||
('is_active', models.BooleanField(default=True, verbose_name='Active')), |
||||
('date_expired', models.DateTimeField(default=common.utils.date_expired_default, verbose_name='Date expired')), |
||||
('created_by', models.CharField(blank=True, max_length=128, verbose_name='Created by')), |
||||
('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date created')), |
||||
('comment', models.TextField(blank=True, verbose_name='Comment')), |
||||
('asset_groups', models.ManyToManyField(blank=True, related_name='granted_by_permissions', to='assets.AssetGroup', verbose_name='Asset group')), |
||||
('assets', models.ManyToManyField(blank=True, related_name='granted_by_permissions', to='assets.Asset', verbose_name='Asset')), |
||||
('system_users', models.ManyToManyField(related_name='granted_by_permissions', to='assets.SystemUser', verbose_name='System user')), |
||||
], |
||||
), |
||||
] |
@ -1,102 +0,0 @@
|
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11 on 2017-12-24 15:21 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
import uuid |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='Command', |
||||
fields=[ |
||||
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), |
||||
('user', models.CharField(max_length=64, verbose_name='User')), |
||||
('asset', models.CharField(max_length=128, verbose_name='Asset')), |
||||
('system_user', models.CharField(max_length=64, verbose_name='System user')), |
||||
('input', models.CharField(db_index=True, max_length=128, verbose_name='Input')), |
||||
('output', models.CharField(blank=True, max_length=1024, verbose_name='Output')), |
||||
('session', models.CharField(db_index=True, max_length=36, verbose_name='Session')), |
||||
('timestamp', models.IntegerField(db_index=True)), |
||||
], |
||||
options={ |
||||
'db_table': 'terminal_command', |
||||
'ordering': ('-timestamp',), |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Session', |
||||
fields=[ |
||||
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), |
||||
('user', models.CharField(max_length=128, verbose_name='User')), |
||||
('asset', models.CharField(max_length=1024, verbose_name='Asset')), |
||||
('system_user', models.CharField(max_length=128, verbose_name='System user')), |
||||
('login_from', models.CharField(choices=[('ST', 'SSH Terminal'), ('WT', 'Web Terminal')], default='ST', max_length=2)), |
||||
('is_finished', models.BooleanField(default=False)), |
||||
('has_replay', models.BooleanField(default=False, verbose_name='Replay')), |
||||
('has_command', models.BooleanField(default=False, verbose_name='Command')), |
||||
('date_start', models.DateTimeField(verbose_name='Date start')), |
||||
('date_end', models.DateTimeField(null=True, verbose_name='Date end')), |
||||
], |
||||
options={ |
||||
'db_table': 'terminal_session', |
||||
'ordering': ['-date_start'], |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Status', |
||||
fields=[ |
||||
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), |
||||
('session_online', models.IntegerField(default=0, verbose_name='Session Online')), |
||||
('cpu_used', models.FloatField(verbose_name='CPU Usage')), |
||||
('memory_used', models.FloatField(verbose_name='Memory Used')), |
||||
('connections', models.IntegerField(verbose_name='Connections')), |
||||
('threads', models.IntegerField(verbose_name='Threads')), |
||||
('boot_time', models.FloatField(verbose_name='Boot Time')), |
||||
('date_created', models.DateTimeField(auto_now_add=True)), |
||||
], |
||||
options={ |
||||
'db_table': 'terminal_status', |
||||
'get_latest_by': 'date_created', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Task', |
||||
fields=[ |
||||
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), |
||||
('name', models.CharField(choices=[('kill_session', 'Kill Session')], max_length=128, verbose_name='Name')), |
||||
('args', models.CharField(max_length=1024, verbose_name='Args')), |
||||
('is_finished', models.BooleanField(default=False)), |
||||
('date_created', models.DateTimeField(auto_now_add=True)), |
||||
('date_finished', models.DateTimeField(null=True)), |
||||
], |
||||
options={ |
||||
'db_table': 'terminal_task', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Terminal', |
||||
fields=[ |
||||
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), |
||||
('name', models.CharField(max_length=32, unique=True, verbose_name='Name')), |
||||
('remote_addr', models.CharField(max_length=128, verbose_name='Remote Address')), |
||||
('ssh_port', models.IntegerField(default=2222, verbose_name='SSH Port')), |
||||
('http_port', models.IntegerField(default=5000, verbose_name='HTTP Port')), |
||||
('is_accepted', models.BooleanField(default=False, verbose_name='Is Accepted')), |
||||
('is_deleted', models.BooleanField(default=False)), |
||||
('date_created', models.DateTimeField(auto_now_add=True)), |
||||
('comment', models.TextField(blank=True, verbose_name='Comment')), |
||||
], |
||||
options={ |
||||
'db_table': 'terminal', |
||||
'ordering': ('is_accepted',), |
||||
}, |
||||
), |
||||
] |
@ -1,139 +0,0 @@
|
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11 on 2017-12-21 16:06 |
||||
from __future__ import unicode_literals |
||||
|
||||
import common.utils |
||||
from django.contrib.auth.hashers import make_password |
||||
from django.conf import settings |
||||
import django.contrib.auth.models |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
import django.utils.timezone |
||||
import uuid |
||||
|
||||
|
||||
def add_default_group(apps, schema_editor): |
||||
group_model = apps.get_model("users", "UserGroup") |
||||
db_alias = schema_editor.connection.alias |
||||
group_model.objects.using(db_alias).create( |
||||
name="Default" |
||||
) |
||||
|
||||
|
||||
def add_default_admin(apps, schema_editor): |
||||
user_model = apps.get_model("users", "User") |
||||
db_alias = schema_editor.connection.alias |
||||
admin = user_model.objects.using(db_alias).create( |
||||
username="admin", name="Administrator", |
||||
email="admin@mycomany.com", role="Admin", |
||||
password=make_password("admin"), |
||||
) |
||||
group_model = apps.get_model("users", "UserGroup") |
||||
default_group = group_model.objects.using(db_alias).get(name="Default") |
||||
admin.groups.add(default_group) |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
('auth', '0008_alter_user_username_max_length'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='User', |
||||
fields=[ |
||||
('password', models.CharField(max_length=128, verbose_name='password')), |
||||
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), |
||||
('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')), |
||||
('last_name', models.CharField(blank=True, max_length=30, verbose_name='last name')), |
||||
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), |
||||
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), |
||||
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), |
||||
('username', models.CharField(max_length=20, unique=True, verbose_name='Username')), |
||||
('name', models.CharField(max_length=20, verbose_name='Name')), |
||||
('email', models.EmailField(max_length=30, unique=True, verbose_name='Email')), |
||||
('role', models.CharField(blank=True, choices=[('Admin', 'Administrator'), ('User', 'User'), ('App', 'Application')], default='User', max_length=10, verbose_name='Role')), |
||||
('avatar', models.ImageField(null=True, upload_to='avatar', verbose_name='Avatar')), |
||||
('wechat', models.CharField(blank=True, max_length=30, verbose_name='Wechat')), |
||||
('phone', models.CharField(blank=True, max_length=20, null=True, verbose_name='Phone')), |
||||
('enable_otp', models.BooleanField(default=False, verbose_name='Enable OTP')), |
||||
('secret_key_otp', models.CharField(blank=True, max_length=16)), |
||||
('_private_key', models.CharField(blank=True, max_length=5000, verbose_name='Private key')), |
||||
('_public_key', models.CharField(blank=True, max_length=5000, verbose_name='Public key')), |
||||
('comment', models.TextField(blank=True, max_length=200, verbose_name='Comment')), |
||||
('is_first_login', models.BooleanField(default=False)), |
||||
('date_expired', models.DateTimeField(blank=True, default=common.utils.date_expired_default, null=True, verbose_name='Date expired')), |
||||
('created_by', models.CharField(default='', max_length=30, verbose_name='Created by')), |
||||
], |
||||
options={ |
||||
'ordering': ['username'], |
||||
}, |
||||
managers=[ |
||||
('objects', django.contrib.auth.models.UserManager()), |
||||
], |
||||
), |
||||
migrations.CreateModel( |
||||
name='AccessKey', |
||||
fields=[ |
||||
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, verbose_name='AccessKeyID')), |
||||
('secret', models.UUIDField(default=uuid.uuid4, editable=False, verbose_name='AccessKeySecret')), |
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='access_key', to=settings.AUTH_USER_MODEL, verbose_name='User')), |
||||
], |
||||
), |
||||
migrations.CreateModel( |
||||
name='LoginLog', |
||||
fields=[ |
||||
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), |
||||
('username', models.CharField(max_length=20, verbose_name='Username')), |
||||
('type', models.CharField(choices=[('W', 'Web'), ('T', 'Terminal')], max_length=2, verbose_name='Login type')), |
||||
('ip', models.GenericIPAddressField(verbose_name='Login ip')), |
||||
('city', models.CharField(blank=True, max_length=254, null=True, verbose_name='Login city')), |
||||
('user_agent', models.CharField(blank=True, max_length=254, null=True, verbose_name='User agent')), |
||||
('datetime', models.DateTimeField(auto_now_add=True, verbose_name='Date login')), |
||||
], |
||||
options={ |
||||
'ordering': ['-datetime', 'username'], |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='PrivateToken', |
||||
fields=[ |
||||
('key', models.CharField(max_length=40, primary_key=True, serialize=False, verbose_name='Key')), |
||||
('created', models.DateTimeField(auto_now_add=True, verbose_name='Created')), |
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='auth_token', to=settings.AUTH_USER_MODEL, verbose_name='User')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Private Token', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='UserGroup', |
||||
fields=[ |
||||
('is_discard', models.BooleanField(default=False, verbose_name='is discard')), |
||||
('discard_time', models.DateTimeField(blank=True, null=True, verbose_name='discard time')), |
||||
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), |
||||
('name', models.CharField(max_length=128, verbose_name='Name')), |
||||
('comment', models.TextField(blank=True, verbose_name='Comment')), |
||||
('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')), |
||||
('created_by', models.CharField(max_length=100)), |
||||
], |
||||
options={ |
||||
'ordering': ['name'], |
||||
}, |
||||
), |
||||
migrations.AddField( |
||||
model_name='user', |
||||
name='groups', |
||||
field=models.ManyToManyField(blank=True, related_name='users', to='users.UserGroup', verbose_name='User group'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='user', |
||||
name='user_permissions', |
||||
field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions'), |
||||
), |
||||
migrations.RunPython(add_default_group), |
||||
migrations.RunPython(add_default_admin), |
||||
] |
@ -1,35 +0,0 @@
|
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11 on 2017-12-25 03:57 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('users', '0001_initial'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AlterField( |
||||
model_name='user', |
||||
name='email', |
||||
field=models.EmailField(max_length=128, unique=True, verbose_name='Email'), |
||||
), |
||||
migrations.AlterField( |
||||
model_name='user', |
||||
name='name', |
||||
field=models.CharField(max_length=128, verbose_name='Name'), |
||||
), |
||||
migrations.AlterField( |
||||
model_name='user', |
||||
name='username', |
||||
field=models.CharField(max_length=128, unique=True, verbose_name='Username'), |
||||
), |
||||
migrations.AlterField( |
||||
model_name='user', |
||||
name='wechat', |
||||
field=models.CharField(blank=True, max_length=128, verbose_name='Wechat'), |
||||
), |
||||
] |
@ -1,11 +0,0 @@
|
||||
用户管理模块 |
||||
============= |
||||
|
||||
这里介绍用户管理功能。 |
||||
|
||||
.. toctree:: |
||||
:maxdepth: 1 |
||||
|
||||
user |
||||
user_group |
||||
login_log |
@ -1,21 +0,0 @@
|
||||
.. jumpserver documentation master file, created by |
||||
sphinx-quickstart on Mon Feb 26 23:28:27 2018. |
||||
You can adapt this file completely to your liking, but it should at least |
||||
contain the root `toctree` directive. |
||||
|
||||
Jumpserver 文档 |
||||
==================== |
||||
|
||||
目录: |
||||
|
||||
.. toctree:: |
||||
:maxdepth: 2 |
||||
|
||||
introduce |
||||
installation |
||||
admin_guide |
||||
user_guide |
||||
development |
||||
contributor |
||||
contact |
||||
snapshot |
@ -1,260 +0,0 @@
|
||||
|
||||
|
||||
<!DOCTYPE html> |
||||
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> |
||||
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
|
||||
<title>资产管理模块 — Jumpserver 0.5.0 文档</title> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="index" title="索引" |
||||
href="genindex.html"/> |
||||
<link rel="search" title="搜索" href="search.html"/> |
||||
<link rel="top" title="Jumpserver 0.5.0 文档" href="index.html"/> |
||||
<link rel="up" title="管理文档" href="admin_guide.html"/> |
||||
<link rel="next" title="资产列表" href="asset_list.html"/> |
||||
<link rel="prev" title="登录日志" href="login_log.html"/> |
||||
|
||||
|
||||
<script src="_static/js/modernizr.min.js"></script> |
||||
|
||||
</head> |
||||
|
||||
<body class="wy-body-for-nav" role="document"> |
||||
|
||||
|
||||
<div class="wy-grid-for-nav"> |
||||
|
||||
|
||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side"> |
||||
<div class="wy-side-scroll"> |
||||
<div class="wy-side-nav-search"> |
||||
|
||||
|
||||
|
||||
<a href="index.html"> |
||||
|
||||
|
||||
|
||||
|
||||
<img src="_static/logo-text.png" class="logo" /> |
||||
|
||||
</a> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div role="search"> |
||||
<form id="rtd-search-form" class="wy-form" action="search.html" method="get"> |
||||
<input type="text" name="q" placeholder="Search docs" /> |
||||
<input type="hidden" name="check_keywords" value="yes" /> |
||||
<input type="hidden" name="area" value="default" /> |
||||
</form> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
|
||||
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="current"> |
||||
<li class="toctree-l1"><a class="reference internal" href="introduce.html">总体介绍</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">安装文档</a></li> |
||||
<li class="toctree-l1 current"><a class="reference internal" href="admin_guide.html">管理文档</a><ul class="current"> |
||||
<li class="toctree-l2"><a class="reference internal" href="admin_user.html">用户管理模块</a></li> |
||||
<li class="toctree-l2 current"><a class="current reference internal" href="#">资产管理模块</a><ul> |
||||
<li class="toctree-l3"><a class="reference internal" href="asset_list.html">资产列表</a></li> |
||||
<li class="toctree-l3"><a class="reference internal" href="asset_admin_user.html">管理用户</a></li> |
||||
<li class="toctree-l3"><a class="reference internal" href="asset_system_user.html">系统用户</a></li> |
||||
<li class="toctree-l3"><a class="reference internal" href="asset_label.html">标签管理</a></li> |
||||
</ul> |
||||
</li> |
||||
</ul> |
||||
</li> |
||||
<li class="toctree-l1"><a class="reference internal" href="user_guide.html">用户使用文档</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="development.html">开发文档</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="contributor.html">贡献者</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="contact.html">联系方式</a></li> |
||||
</ul> |
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
</nav> |
||||
|
||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> |
||||
|
||||
|
||||
<nav class="wy-nav-top" role="navigation" aria-label="top navigation"> |
||||
|
||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i> |
||||
<a href="index.html">Jumpserver</a> |
||||
|
||||
</nav> |
||||
|
||||
|
||||
|
||||
<div class="wy-nav-content"> |
||||
<div class="rst-content"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div role="navigation" aria-label="breadcrumbs navigation"> |
||||
|
||||
<ul class="wy-breadcrumbs"> |
||||
|
||||
<li><a href="index.html">Docs</a> »</li> |
||||
|
||||
<li><a href="admin_guide.html">管理文档</a> »</li> |
||||
|
||||
<li>资产管理模块</li> |
||||
|
||||
|
||||
<li class="wy-breadcrumbs-aside"> |
||||
|
||||
|
||||
|
||||
</li> |
||||
|
||||
</ul> |
||||
|
||||
|
||||
<hr/> |
||||
</div> |
||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |
||||
<div itemprop="articleBody"> |
||||
|
||||
<div class="section" id="id1"> |
||||
<h1>资产管理模块<a class="headerlink" href="#id1" title="永久链接至标题">¶</a></h1> |
||||
<p>这里介绍资产管理模块功能。</p> |
||||
<div class="toctree-wrapper compound"> |
||||
<ul> |
||||
<li class="toctree-l1"><a class="reference internal" href="asset_list.html">资产列表</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="asset_admin_user.html">管理用户</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="asset_system_user.html">系统用户</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="asset_label.html">标签管理</a></li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
<div class="articleComments"> |
||||
|
||||
</div> |
||||
</div> |
||||
<footer> |
||||
|
||||
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> |
||||
|
||||
<a href="asset_list.html" class="btn btn-neutral float-right" title="资产列表" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> |
||||
|
||||
|
||||
<a href="login_log.html" class="btn btn-neutral" title="登录日志" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> |
||||
|
||||
</div> |
||||
|
||||
|
||||
<hr/> |
||||
|
||||
<div role="contentinfo"> |
||||
<p> |
||||
© Copyright 北京堆栈科技有限公司 © 2014-2018. |
||||
|
||||
</p> |
||||
</div> |
||||
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. |
||||
|
||||
</footer> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</section> |
||||
|
||||
</div> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
var DOCUMENTATION_OPTIONS = { |
||||
URL_ROOT:'./', |
||||
VERSION:'0.5.0', |
||||
COLLAPSE_INDEX:false, |
||||
FILE_SUFFIX:'.html', |
||||
HAS_SOURCE: true, |
||||
SOURCELINK_SUFFIX: '.txt' |
||||
}; |
||||
</script> |
||||
<script type="text/javascript" src="_static/jquery.js"></script> |
||||
<script type="text/javascript" src="_static/underscore.js"></script> |
||||
<script type="text/javascript" src="_static/doctools.js"></script> |
||||
<script type="text/javascript" src="_static/translations.js"></script> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript" src="_static/js/theme.js"></script> |
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
jQuery(function () { |
||||
SphinxRtdTheme.StickyNav.enable(); |
||||
}); |
||||
</script> |
||||
|
||||
|
||||
</body> |
||||
</html> |
@ -1,258 +0,0 @@
|
||||
|
||||
|
||||
<!DOCTYPE html> |
||||
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> |
||||
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
|
||||
<title>用户管理模块 — Jumpserver 0.5.0 文档</title> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="index" title="索引" |
||||
href="genindex.html"/> |
||||
<link rel="search" title="搜索" href="search.html"/> |
||||
<link rel="top" title="Jumpserver 0.5.0 文档" href="index.html"/> |
||||
<link rel="up" title="管理文档" href="admin_guide.html"/> |
||||
<link rel="next" title="用户列表" href="user.html"/> |
||||
<link rel="prev" title="管理文档" href="admin_guide.html"/> |
||||
|
||||
|
||||
<script src="_static/js/modernizr.min.js"></script> |
||||
|
||||
</head> |
||||
|
||||
<body class="wy-body-for-nav" role="document"> |
||||
|
||||
|
||||
<div class="wy-grid-for-nav"> |
||||
|
||||
|
||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side"> |
||||
<div class="wy-side-scroll"> |
||||
<div class="wy-side-nav-search"> |
||||
|
||||
|
||||
|
||||
<a href="index.html"> |
||||
|
||||
|
||||
|
||||
|
||||
<img src="_static/logo-text.png" class="logo" /> |
||||
|
||||
</a> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div role="search"> |
||||
<form id="rtd-search-form" class="wy-form" action="search.html" method="get"> |
||||
<input type="text" name="q" placeholder="Search docs" /> |
||||
<input type="hidden" name="check_keywords" value="yes" /> |
||||
<input type="hidden" name="area" value="default" /> |
||||
</form> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
|
||||
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="current"> |
||||
<li class="toctree-l1"><a class="reference internal" href="introduce.html">总体介绍</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">安装文档</a></li> |
||||
<li class="toctree-l1 current"><a class="reference internal" href="admin_guide.html">管理文档</a><ul class="current"> |
||||
<li class="toctree-l2 current"><a class="current reference internal" href="#">用户管理模块</a><ul> |
||||
<li class="toctree-l3"><a class="reference internal" href="user.html">用户列表</a></li> |
||||
<li class="toctree-l3"><a class="reference internal" href="user_group.html">用户组列表</a></li> |
||||
<li class="toctree-l3"><a class="reference internal" href="login_log.html">登录日志</a></li> |
||||
</ul> |
||||
</li> |
||||
<li class="toctree-l2"><a class="reference internal" href="admin_asset.html">资产管理模块</a></li> |
||||
</ul> |
||||
</li> |
||||
<li class="toctree-l1"><a class="reference internal" href="user_guide.html">用户使用文档</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="development.html">开发文档</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="contributor.html">贡献者</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="contact.html">联系方式</a></li> |
||||
</ul> |
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
</nav> |
||||
|
||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> |
||||
|
||||
|
||||
<nav class="wy-nav-top" role="navigation" aria-label="top navigation"> |
||||
|
||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i> |
||||
<a href="index.html">Jumpserver</a> |
||||
|
||||
</nav> |
||||
|
||||
|
||||
|
||||
<div class="wy-nav-content"> |
||||
<div class="rst-content"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div role="navigation" aria-label="breadcrumbs navigation"> |
||||
|
||||
<ul class="wy-breadcrumbs"> |
||||
|
||||
<li><a href="index.html">Docs</a> »</li> |
||||
|
||||
<li><a href="admin_guide.html">管理文档</a> »</li> |
||||
|
||||
<li>用户管理模块</li> |
||||
|
||||
|
||||
<li class="wy-breadcrumbs-aside"> |
||||
|
||||
|
||||
|
||||
</li> |
||||
|
||||
</ul> |
||||
|
||||
|
||||
<hr/> |
||||
</div> |
||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |
||||
<div itemprop="articleBody"> |
||||
|
||||
<div class="section" id="id1"> |
||||
<h1>用户管理模块<a class="headerlink" href="#id1" title="永久链接至标题">¶</a></h1> |
||||
<p>这里介绍用户管理功能。</p> |
||||
<div class="toctree-wrapper compound"> |
||||
<ul> |
||||
<li class="toctree-l1"><a class="reference internal" href="user.html">用户列表</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="user_group.html">用户组列表</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="login_log.html">登录日志</a></li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
<div class="articleComments"> |
||||
|
||||
</div> |
||||
</div> |
||||
<footer> |
||||
|
||||
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> |
||||
|
||||
<a href="user.html" class="btn btn-neutral float-right" title="用户列表" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> |
||||
|
||||
|
||||
<a href="admin_guide.html" class="btn btn-neutral" title="管理文档" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> |
||||
|
||||
</div> |
||||
|
||||
|
||||
<hr/> |
||||
|
||||
<div role="contentinfo"> |
||||
<p> |
||||
© Copyright 北京堆栈科技有限公司 © 2014-2018. |
||||
|
||||
</p> |
||||
</div> |
||||
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. |
||||
|
||||
</footer> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</section> |
||||
|
||||
</div> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
var DOCUMENTATION_OPTIONS = { |
||||
URL_ROOT:'./', |
||||
VERSION:'0.5.0', |
||||
COLLAPSE_INDEX:false, |
||||
FILE_SUFFIX:'.html', |
||||
HAS_SOURCE: true, |
||||
SOURCELINK_SUFFIX: '.txt' |
||||
}; |
||||
</script> |
||||
<script type="text/javascript" src="_static/jquery.js"></script> |
||||
<script type="text/javascript" src="_static/underscore.js"></script> |
||||
<script type="text/javascript" src="_static/doctools.js"></script> |
||||
<script type="text/javascript" src="_static/translations.js"></script> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript" src="_static/js/theme.js"></script> |
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
jQuery(function () { |
||||
SphinxRtdTheme.StickyNav.enable(); |
||||
}); |
||||
</script> |
||||
|
||||
|
||||
</body> |
||||
</html> |
@ -1,282 +0,0 @@
|
||||
|
||||
|
||||
<!DOCTYPE html> |
||||
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> |
||||
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
|
||||
<title>Jumpserver 文档 — Jumpserver 0.5.0 文档</title> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="index" title="索引" |
||||
href="genindex.html"/> |
||||
<link rel="search" title="搜索" href="search.html"/> |
||||
<link rel="top" title="Jumpserver 0.5.0 文档" href="#"/> |
||||
<link rel="next" title="总体介绍" href="introduce.html"/> |
||||
|
||||
|
||||
<script src="_static/js/modernizr.min.js"></script> |
||||
|
||||
</head> |
||||
|
||||
<body class="wy-body-for-nav" role="document"> |
||||
|
||||
|
||||
<div class="wy-grid-for-nav"> |
||||
|
||||
|
||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side"> |
||||
<div class="wy-side-scroll"> |
||||
<div class="wy-side-nav-search"> |
||||
|
||||
|
||||
|
||||
<a href="#"> |
||||
|
||||
|
||||
|
||||
|
||||
<img src="_static/logo-text.png" class="logo" /> |
||||
|
||||
</a> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div role="search"> |
||||
<form id="rtd-search-form" class="wy-form" action="search.html" method="get"> |
||||
<input type="text" name="q" placeholder="Search docs" /> |
||||
<input type="hidden" name="check_keywords" value="yes" /> |
||||
<input type="hidden" name="area" value="default" /> |
||||
</form> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
|
||||
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul> |
||||
<li class="toctree-l1"><a class="reference internal" href="introduce.html">总体介绍</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">安装文档</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="admin_guide.html">管理文档</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="user_guide.html">用户使用文档</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="development.html">开发文档</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="contributor.html">贡献者</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="contact.html">联系方式</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="snapshot.html">Snapshot 截图</a></li> |
||||
</ul> |
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
</nav> |
||||
|
||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> |
||||
|
||||
|
||||
<nav class="wy-nav-top" role="navigation" aria-label="top navigation"> |
||||
|
||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i> |
||||
<a href="#">Jumpserver</a> |
||||
|
||||
</nav> |
||||
|
||||
|
||||
|
||||
<div class="wy-nav-content"> |
||||
<div class="rst-content"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div role="navigation" aria-label="breadcrumbs navigation"> |
||||
|
||||
<ul class="wy-breadcrumbs"> |
||||
|
||||
<li><a href="#">Docs</a> »</li> |
||||
|
||||
<li>Jumpserver 文档</li> |
||||
|
||||
|
||||
<li class="wy-breadcrumbs-aside"> |
||||
|
||||
|
||||
|
||||
</li> |
||||
|
||||
</ul> |
||||
|
||||
|
||||
<hr/> |
||||
</div> |
||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |
||||
<div itemprop="articleBody"> |
||||
|
||||
<div class="section" id="jumpserver"> |
||||
<h1>Jumpserver 文档<a class="headerlink" href="#jumpserver" title="永久链接至标题">¶</a></h1> |
||||
<p>目录:</p> |
||||
<div class="toctree-wrapper compound"> |
||||
<ul> |
||||
<li class="toctree-l1"><a class="reference internal" href="introduce.html">总体介绍</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="installation.html">安装文档</a><ul> |
||||
<li class="toctree-l2"><a class="reference internal" href="quickstart.html">快速安装</a></li> |
||||
<li class="toctree-l2"><a class="reference internal" href="step_by_step.html">一步一步安装</a></li> |
||||
<li class="toctree-l2"><a class="reference internal" href="upgrade.html">升级</a></li> |
||||
</ul> |
||||
</li> |
||||
<li class="toctree-l1"><a class="reference internal" href="admin_guide.html">管理文档</a><ul> |
||||
<li class="toctree-l2"><a class="reference internal" href="admin_user.html">用户管理模块</a></li> |
||||
<li class="toctree-l2"><a class="reference internal" href="admin_asset.html">资产管理模块</a></li> |
||||
</ul> |
||||
</li> |
||||
<li class="toctree-l1"><a class="reference internal" href="user_guide.html">用户使用文档</a><ul> |
||||
<li class="toctree-l2"><a class="reference internal" href="user_asset.html">个人资产</a></li> |
||||
<li class="toctree-l2"><a class="reference internal" href="user_info.html">个人信息</a></li> |
||||
</ul> |
||||
</li> |
||||
<li class="toctree-l1"><a class="reference internal" href="development.html">开发文档</a><ul> |
||||
<li class="toctree-l2"><a class="reference internal" href="api_style_guide.html">REST API规范约定</a></li> |
||||
<li class="toctree-l2"><a class="reference internal" href="python_style_guide.html">Jumpserver 项目规范(Draft)</a></li> |
||||
<li class="toctree-l2"><a class="reference internal" href="project_structure.html">项目骨架</a></li> |
||||
</ul> |
||||
</li> |
||||
<li class="toctree-l1"><a class="reference internal" href="contributor.html">贡献者</a></li> |
||||
<li class="toctree-l1"><a class="reference internal" href="contact.html">联系方式</a><ul> |
||||
<li class="toctree-l2"><a class="reference internal" href="contact.html#id2">商业支持</a></li> |
||||
<li class="toctree-l2"><a class="reference internal" href="contact.html#qq">QQ群</a></li> |
||||
<li class="toctree-l2"><a class="reference internal" href="contact.html#github">Github</a></li> |
||||
<li class="toctree-l2"><a class="reference internal" href="contact.html#id3">官网</a></li> |
||||
<li class="toctree-l2"><a class="reference internal" href="contact.html#demo">Demo</a></li> |
||||
<li class="toctree-l2"><a class="reference internal" href="contact.html#id4">邮件</a></li> |
||||
</ul> |
||||
</li> |
||||
<li class="toctree-l1"><a class="reference internal" href="snapshot.html">Snapshot 截图</a><ul> |
||||
<li class="toctree-l2"><a class="reference internal" href="snapshot.html#id1">仪表盘</a></li> |
||||
<li class="toctree-l2"><a class="reference internal" href="snapshot.html#id2">用户管理</a></li> |
||||
<li class="toctree-l2"><a class="reference internal" href="snapshot.html#id3">资产管理</a></li> |
||||
<li class="toctree-l2"><a class="reference internal" href="snapshot.html#linux">Linux 终端</a></li> |
||||
<li class="toctree-l2"><a class="reference internal" href="snapshot.html#windows">Windows 终端</a></li> |
||||
</ul> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
<div class="articleComments"> |
||||
|
||||
</div> |
||||
</div> |
||||
<footer> |
||||
|
||||
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> |
||||
|
||||
<a href="introduce.html" class="btn btn-neutral float-right" title="总体介绍" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> |
||||
|
||||
|
||||
</div> |
||||
|
||||
|
||||
<hr/> |
||||
|
||||
<div role="contentinfo"> |
||||
<p> |
||||
© Copyright 北京堆栈科技有限公司 © 2014-2018. |
||||
|
||||
</p> |
||||
</div> |
||||
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. |
||||
|
||||
</footer> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</section> |
||||
|
||||
</div> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
var DOCUMENTATION_OPTIONS = { |
||||
URL_ROOT:'./', |
||||
VERSION:'0.5.0', |
||||
COLLAPSE_INDEX:false, |
||||
FILE_SUFFIX:'.html', |
||||
HAS_SOURCE: true, |
||||
SOURCELINK_SUFFIX: '.txt' |
||||
}; |
||||
</script> |
||||
<script type="text/javascript" src="_static/jquery.js"></script> |
||||
<script type="text/javascript" src="_static/underscore.js"></script> |
||||
<script type="text/javascript" src="_static/doctools.js"></script> |
||||
<script type="text/javascript" src="_static/translations.js"></script> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript" src="_static/js/theme.js"></script> |
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
jQuery(function () { |
||||
SphinxRtdTheme.StickyNav.enable(); |
||||
}); |
||||
</script> |
||||
|
||||
|
||||
</body> |
||||
</html> |
Binary file not shown.
File diff suppressed because one or more lines are too long
@ -1,4 +1,34 @@
|
||||
系统用户 |
||||
=========== |
||||
|
||||
这里介绍系统用户功能。 |
||||
这里介绍系统用户功能。 |
||||
|
||||
.. contents:: Topics |
||||
|
||||
.. _view_admin_system_user: |
||||
|
||||
查看系统用户 |
||||
```````````` |
||||
|
||||
点击页面左侧“资产管理“菜单下的”系统用户“按钮,进入系统用户列表页面,查看系统用户的名称,资产数和连接数等信息。 |
||||
|
||||
.. _create_admin_system_user: |
||||
|
||||
创建系统用户 |
||||
```````````` |
||||
|
||||
点击页面左上角的“创建系统用户“按钮,进入创建系统用户页面,填写系统用户的基本信息、认证信息和其它信息,点击“提交“按钮,完成系统用户创建。 |
||||
|
||||
.. _update_admin_system_user: |
||||
|
||||
更新系统用户 |
||||
````````````` |
||||
|
||||
点击页面动作栏的“更新”按钮,进入更新系统用户页面,编辑系统用户信息,点击“提交”按钮,系统用户更新完成。 |
||||
|
||||
.. _delete_admin_system_user: |
||||
|
||||
删除系统用户 |
||||
````````````` |
||||
|
||||
点击页面动作栏的“删除”按钮,弹出删除确认框,点击“删除”按钮,完成删除系统用户。 |
Loading…
Reference in new issue