Skip to content

Commit 01d215f

Browse files
committed
添加项目分权
1 parent 3143e9c commit 01d215f

File tree

21 files changed

+266
-103
lines changed

21 files changed

+266
-103
lines changed
326 Bytes
Binary file not shown.

Ops/settings.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,23 @@
105105
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 5
106106
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
107107

108+
CACHES = {
109+
'default': {
110+
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
111+
'LOCATION': '/var/tmp/django_cache',
112+
}
113+
}
114+
115+
CACHE_MIDDLEWARE_KEY_PREFIX = ''
116+
CACHE_MIDDLEWARE_SECONDS = 30
117+
CACHE_MIDDLEWARE_ALIAS = 'default'
118+
108119
MIDDLEWARE = [
109120
'django.middleware.security.SecurityMiddleware',
110121
'django.contrib.sessions.middleware.SessionMiddleware',
122+
'django.middleware.cache.UpdateCacheMiddleware',
111123
'django.middleware.common.CommonMiddleware',
124+
'django.middleware.cache.FetchFromCacheMiddleware',
112125
'django.middleware.csrf.CsrfViewMiddleware',
113126
'django.contrib.auth.middleware.AuthenticationMiddleware',
114127
'django.contrib.messages.middleware.MessageMiddleware',
@@ -119,7 +132,7 @@
119132

120133
REST_FRAMEWORK = {
121134
'DEFAULT_PERMISSION_CLASSES': (
122-
'rest_framework.permissions.IsAuthenticated',
135+
'rest_framework.permissions.IsAdminUser',
123136
),
124137
'DEFAULT_AUTHENTICATION_CLASSES': (
125138
'rest_framework.authentication.SessionAuthentication',
-4 Bytes
Binary file not shown.

api/views.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,130 +8,130 @@ class InventoryViewSet(viewsets.ModelViewSet):
88
"""
99
queryset = AnsibleInventory.objects.all().order_by('id')
1010
serializer_class = InventorySerializer
11-
permission_classes = (permissions.IsAuthenticated,)
11+
permission_classes = (permissions.IsAdminUser,)
1212

1313

1414
class AssetsViewSet(viewsets.ModelViewSet):
1515
queryset = Assets.objects.all().order_by('id')
1616
serializer_class = AssetsSerializer
17-
permission_classes = (permissions.IsAuthenticated,)
17+
permission_classes = (permissions.IsAdminUser,)
1818

1919

2020
class ServerAssetsViewSet(viewsets.ModelViewSet):
2121
queryset = ServerAssets.objects.all().order_by('id')
2222
serializer_class = ServerAssetsSerializer
23-
permission_classes = (permissions.IsAuthenticated,)
23+
permission_classes = (permissions.IsAdminUser,)
2424

2525

2626
class NetworkAssetsViewSet(viewsets.ModelViewSet):
2727
queryset = NetworkAssets.objects.all().order_by('id')
2828
serializer_class = NetworkAssetsSerializer
29-
permission_classes = (permissions.IsAuthenticated,)
29+
permission_classes = (permissions.IsAdminUser,)
3030

3131

3232
class OfficeAssetsViewSet(viewsets.ModelViewSet):
3333
queryset = OfficeAssets.objects.all().order_by('id')
3434
serializer_class = OfficeAssetsSerializer
35-
permission_classes = (permissions.IsAuthenticated,)
35+
permission_classes = (permissions.IsAdminUser,)
3636

3737

3838
class SecurityAssetsViewSet(viewsets.ModelViewSet):
3939
queryset = SecurityAssets.objects.all().order_by('id')
4040
serializer_class = SecurityAssetsSerializer
41-
permission_classes = (permissions.IsAuthenticated,)
41+
permission_classes = (permissions.IsAdminUser,)
4242

4343

4444
class StorageAssetsViewSet(viewsets.ModelViewSet):
4545
queryset = StorageAssets.objects.all().order_by('id')
4646
serializer_class = StorageAssetsSerializer
47-
permission_classes = (permissions.IsAuthenticated,)
47+
permission_classes = (permissions.IsAdminUser,)
4848

4949

5050
class SoftwareAssetsViewSet(viewsets.ModelViewSet):
5151
queryset = SoftwareAssets.objects.all().order_by('id')
5252
serializer_class = SoftwareAssetsSerializer
53-
permission_classes = (permissions.IsAuthenticated,)
53+
permission_classes = (permissions.IsAdminUser,)
5454

5555

5656
class ProjectViewSet(viewsets.ModelViewSet):
5757
queryset = Project.objects.all().order_by('id')
5858
serializer_class = ProjectSerializer
59-
permission_classes = (permissions.IsAuthenticated,)
59+
permission_classes = (permissions.IsAdminUser,)
6060

6161

6262
class ProjectConfigViewSet(viewsets.ModelViewSet):
6363
queryset = ProjectConfig.objects.all().order_by('id')
6464
serializer_class = ProjectConfigSerializer
65-
permission_classes = (permissions.IsAuthenticated,)
65+
permission_classes = (permissions.IsAdminUser,)
6666

6767

6868
class ServiceViewSet(viewsets.ModelViewSet):
6969
queryset = Service.objects.all().order_by('id')
7070
serializer_class = ServiceSerializer
71-
permission_classes = (permissions.IsAuthenticated,)
71+
permission_classes = (permissions.IsAdminUser,)
7272

7373

7474
class AssetProviderViewSet(viewsets.ModelViewSet):
7575
queryset = AssetProvider.objects.all().order_by('id')
7676
serializer_class = AssetProviderSerializer
77-
permission_classes = (permissions.IsAuthenticated,)
77+
permission_classes = (permissions.IsAdminUser,)
7878

7979

8080
class IDCViewSet(viewsets.ModelViewSet):
8181
queryset = IDC.objects.all().order_by('id')
8282
serializer_class = IDCSerializer
83-
permission_classes = (permissions.IsAuthenticated,)
83+
permission_classes = (permissions.IsAdminUser,)
8484

8585

8686
class CabinetViewSet(viewsets.ModelViewSet):
8787
queryset = Cabinet.objects.all().order_by('id')
8888
serializer_class = CabinetSerializer
89-
permission_classes = (permissions.IsAuthenticated,)
89+
permission_classes = (permissions.IsAdminUser,)
9090

9191

9292
class UsersViewSet(viewsets.ModelViewSet):
9393
queryset = UserProfile.objects.all().order_by('id')
9494
serializer_class = UsersSerializer
95-
permission_classes = (permissions.IsAuthenticated,)
95+
permission_classes = (permissions.IsAdminUser,)
9696

9797

9898
class PermissionViewSet(viewsets.ModelViewSet):
9999
queryset = Permission.objects.all().order_by('id')
100100
serializer_class = PermissionSerializer
101-
permission_classes = (permissions.IsAuthenticated,)
101+
permission_classes = (permissions.IsAdminUser,)
102102

103103

104104
class GroupViewSet(viewsets.ModelViewSet):
105105
queryset = Group.objects.all().order_by('id')
106106
serializer_class = GroupSerializer
107-
permission_classes = (permissions.IsAuthenticated,)
107+
permission_classes = (permissions.IsAdminUser,)
108108

109109

110110
class FortViewSet(viewsets.ModelViewSet):
111111
queryset = FortServer.objects.all().order_by('id')
112112
serializer_class = FortSerializer
113-
permission_classes = (permissions.IsAuthenticated,)
113+
permission_classes = (permissions.IsAdminUser,)
114114

115115

116116
class FortUserViewSet(viewsets.ModelViewSet):
117117
queryset = FortServerUser.objects.all().order_by('id')
118118
serializer_class = FortUserSerializer
119-
permission_classes = (permissions.IsAuthenticated,)
119+
permission_classes = (permissions.IsAdminUser,)
120120

121121

122122
class PeriodicTaskViewSet(viewsets.ModelViewSet):
123123
queryset = PeriodicTask.objects.all()
124124
serializer_class = PeriodicTaskSerializer
125-
permission_classes = (permissions.IsAuthenticated,)
125+
permission_classes = (permissions.IsAdminUser,)
126126

127127

128128
class WebSiteViewSet(viewsets.ModelViewSet):
129129
queryset = WebSite.objects.all()
130130
serializer_class = WebSiteSerializer
131-
permission_classes = (permissions.IsAuthenticated,)
131+
permission_classes = (permissions.IsAdminUser,)
132132

133133

134134
class PostViewSet(viewsets.ModelViewSet):
135135
queryset = Post.objects.all()
136136
serializer_class = PostSerializer
137-
permission_classes = (permissions.IsAuthenticated,)
137+
permission_classes = (permissions.IsAdminUser,)

dbmanager/views.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ def db_list(request):
1818
if request.method == 'GET':
1919
dbs = DBConfig.objects.select_related('db_server').all()
2020

21-
services = Service.objects.select_related('project').select_related('service_asset').all()
21+
services = Service.objects.select_related('project').select_related('service_asset').filter(
22+
service_name__icontains='mysql')
2223
groups = Group.objects.all()
2324
return render(request, 'dbmanager/db_list.html', locals())
2425
elif request.method == 'POST':

logs/all.log

Lines changed: 102 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,102 @@
1-
INFO 2019-07-10 17:19:44 _log Connected (version 2.0, client OpenSSH_5.3)
2-
INFO 2019-07-10 17:19:44 _log Authentication (publickey) successful!
3-
INFO 2019-07-10 17:19:52 _log Connected (version 2.0, client OpenSSH_5.3)
4-
INFO 2019-07-10 17:19:52 _log Authentication (password) successful!
5-
INFO 2019-07-10 17:19:53 _log [chan 0] Opened sftp connection (server version 3)
6-
INFO 2019-07-10 17:26:34 _log Connected (version 2.0, client OpenSSH_5.3)
7-
INFO 2019-07-10 17:26:34 _log Authentication (publickey) successful!
8-
INFO 2019-07-10 17:26:36 _log [chan 2] Opened sftp connection (server version 3)
9-
INFO 2019-07-10 17:26:38 _log [chan 2] sftp session closed.
10-
INFO 2019-07-10 17:26:45 _log Connected (version 2.0, client OpenSSH_5.3)
11-
INFO 2019-07-10 17:26:45 _log Authentication (publickey) failed.
12-
INFO 2019-07-10 17:26:46 _log Authentication (password) successful!
13-
INFO 2019-07-10 18:26:11 _log Connected (version 2.0, client OpenSSH_5.3)
14-
INFO 2019-07-10 18:26:11 _log Authentication (publickey) successful!
15-
INFO 2019-07-10 18:26:13 _log [chan 2] Opened sftp connection (server version 3)
16-
INFO 2019-07-10 18:26:15 _log [chan 2] sftp session closed.
17-
INFO 2019-07-10 19:38:02 _log Connected (version 2.0, client OpenSSH_5.3)
18-
INFO 2019-07-10 19:38:02 _log Authentication (publickey) successful!
19-
INFO 2019-07-10 19:38:04 _log [chan 2] Opened sftp connection (server version 3)
20-
INFO 2019-07-10 19:38:06 _log [chan 2] sftp session closed.
21-
INFO 2019-07-10 19:38:17 _log Connected (version 2.0, client OpenSSH_5.3)
22-
INFO 2019-07-10 19:38:17 _log Authentication (publickey) successful!
23-
INFO 2019-07-10 19:38:19 _log [chan 2] Opened sftp connection (server version 3)
24-
INFO 2019-07-10 19:38:21 _log [chan 2] sftp session closed.
1+
INFO 2019-07-11 20:24:05 _log Connected (version 2.0, client OpenSSH_5.3)
2+
INFO 2019-07-11 20:24:05 _log Authentication (publickey) failed.
3+
INFO 2019-07-11 20:24:05 _log Authentication (password) successful!
4+
INFO 2019-07-11 20:24:22 _log Connected (version 2.0, client OpenSSH_5.3)
5+
INFO 2019-07-11 20:24:22 _log Authentication (publickey) failed.
6+
INFO 2019-07-11 20:24:22 _log Authentication (password) successful!
7+
INFO 2019-07-11 20:24:34 _log Connected (version 2.0, client OpenSSH_5.3)
8+
INFO 2019-07-11 20:24:34 _log Authentication (password) successful!
9+
INFO 2019-07-11 20:24:34 _log [chan 0] Opened sftp connection (server version 3)
10+
INFO 2019-07-12 10:49:33 _log Connected (version 2.0, client OpenSSH_5.3)
11+
INFO 2019-07-12 10:49:33 _log Authentication (publickey) failed.
12+
INFO 2019-07-12 10:49:34 _log Authentication (password) successful!
13+
INFO 2019-07-12 10:49:44 _log Connected (version 2.0, client OpenSSH_5.3)
14+
INFO 2019-07-12 10:49:44 _log Authentication (password) successful!
15+
INFO 2019-07-12 10:49:44 _log [chan 0] Opened sftp connection (server version 3)
16+
INFO 2019-07-12 14:02:02 _log Connected (version 2.0, client OpenSSH_5.3)
17+
INFO 2019-07-12 14:02:02 _log Authentication (publickey) failed.
18+
INFO 2019-07-12 14:02:02 _log Authentication (password) successful!
19+
INFO 2019-07-12 14:02:14 _log Connected (version 2.0, client OpenSSH_5.3)
20+
INFO 2019-07-12 14:02:14 _log Authentication (password) successful!
21+
INFO 2019-07-12 14:02:15 _log [chan 0] Opened sftp connection (server version 3)
22+
INFO 2019-07-12 14:02:31 _log Connected (version 2.0, client OpenSSH_5.3)
23+
INFO 2019-07-12 14:02:31 _log Authentication (password) successful!
24+
INFO 2019-07-12 14:02:31 _log [chan 0] Opened sftp connection (server version 3)
25+
INFO 2019-07-12 14:11:40 _log Connected (version 2.0, client OpenSSH_5.3)
26+
INFO 2019-07-12 14:11:40 _log Authentication (publickey) failed.
27+
INFO 2019-07-12 14:11:40 _log Authentication (password) successful!
28+
INFO 2019-07-12 14:11:53 _log Connected (version 2.0, client OpenSSH_5.3)
29+
INFO 2019-07-12 14:11:53 _log Authentication (password) successful!
30+
INFO 2019-07-12 14:11:53 _log [chan 0] Opened sftp connection (server version 3)
31+
INFO 2019-07-12 14:12:17 _log Connected (version 2.0, client OpenSSH_5.3)
32+
INFO 2019-07-12 14:12:17 _log Connected (version 2.0, client OpenSSH_5.3)
33+
INFO 2019-07-12 14:12:17 _log Authentication (password) successful!
34+
INFO 2019-07-12 14:12:17 _log [chan 0] Opened sftp connection (server version 3)
35+
INFO 2019-07-12 14:12:17 _log Authentication (password) successful!
36+
INFO 2019-07-12 14:12:17 _log [chan 0] Opened sftp connection (server version 3)
37+
INFO 2019-07-12 16:29:21 _log Connected (version 2.0, client OpenSSH_7.4)
38+
INFO 2019-07-12 16:29:21 _log Authentication (publickey) successful!
39+
INFO 2019-07-12 16:30:40 _log Connected (version 2.0, client OpenSSH_7.4)
40+
INFO 2019-07-12 16:30:40 _log Authentication (publickey) successful!
41+
INFO 2019-07-12 16:30:41 _log [chan 2] Opened sftp connection (server version 3)
42+
INFO 2019-07-12 16:30:42 _log [chan 2] sftp session closed.
43+
INFO 2019-07-12 16:30:48 _log Connected (version 2.0, client OpenSSH_7.4)
44+
INFO 2019-07-12 16:30:48 _log Authentication (publickey) successful!
45+
INFO 2019-07-12 16:30:49 _log [chan 2] Opened sftp connection (server version 3)
46+
INFO 2019-07-12 16:30:56 _log [chan 2] sftp session closed.
47+
INFO 2019-07-12 16:30:57 _log Connected (version 2.0, client OpenSSH_7.4)
48+
INFO 2019-07-12 16:30:57 _log Authentication (publickey) successful!
49+
INFO 2019-07-12 16:30:58 _log [chan 2] Opened sftp connection (server version 3)
50+
INFO 2019-07-12 16:30:58 _log [chan 2] sftp session closed.
51+
INFO 2019-07-12 16:30:58 _log Connected (version 2.0, client OpenSSH_7.4)
52+
INFO 2019-07-12 16:30:58 _log Authentication (publickey) successful!
53+
INFO 2019-07-12 16:30:59 _log [chan 2] Opened sftp connection (server version 3)
54+
INFO 2019-07-12 16:31:00 _log [chan 2] sftp session closed.
55+
INFO 2019-07-12 16:31:00 _log Connected (version 2.0, client OpenSSH_7.4)
56+
INFO 2019-07-12 16:31:00 _log Authentication (publickey) successful!
57+
INFO 2019-07-12 16:31:01 _log [chan 2] Opened sftp connection (server version 3)
58+
INFO 2019-07-12 16:31:01 _log [chan 2] sftp session closed.
59+
INFO 2019-07-12 16:37:59 _log Connected (version 2.0, client OpenSSH_7.4)
60+
INFO 2019-07-12 16:37:59 _log Authentication (publickey) successful!
61+
INFO 2019-07-12 16:38:00 _log [chan 2] Opened sftp connection (server version 3)
62+
INFO 2019-07-12 16:38:01 _log [chan 2] sftp session closed.
63+
INFO 2019-07-12 16:38:02 _log Connected (version 2.0, client OpenSSH_7.4)
64+
INFO 2019-07-12 16:38:02 _log Authentication (publickey) successful!
65+
INFO 2019-07-12 16:38:03 _log [chan 2] Opened sftp connection (server version 3)
66+
INFO 2019-07-12 16:38:04 _log [chan 2] sftp session closed.
67+
INFO 2019-07-12 16:38:04 _log Connected (version 2.0, client OpenSSH_7.4)
68+
INFO 2019-07-12 16:38:04 _log Authentication (publickey) successful!
69+
INFO 2019-07-12 16:38:05 _log [chan 2] Opened sftp connection (server version 3)
70+
INFO 2019-07-12 16:38:07 _log [chan 2] sftp session closed.
71+
INFO 2019-07-12 16:38:07 _log Connected (version 2.0, client OpenSSH_7.4)
72+
INFO 2019-07-12 16:38:07 _log Authentication (publickey) successful!
73+
INFO 2019-07-12 16:38:08 _log [chan 2] Opened sftp connection (server version 3)
74+
INFO 2019-07-12 16:38:09 _log [chan 2] sftp session closed.
75+
INFO 2019-07-12 16:38:09 _log Connected (version 2.0, client OpenSSH_7.4)
76+
INFO 2019-07-12 16:38:09 _log Authentication (publickey) successful!
77+
INFO 2019-07-12 16:38:10 _log [chan 2] Opened sftp connection (server version 3)
78+
INFO 2019-07-12 16:38:10 _log [chan 2] sftp session closed.
79+
INFO 2019-07-12 16:42:46 _log Connected (version 2.0, client OpenSSH_7.4)
80+
INFO 2019-07-12 16:42:46 _log Authentication (publickey) successful!
81+
INFO 2019-07-12 16:42:47 _log [chan 2] Opened sftp connection (server version 3)
82+
INFO 2019-07-12 16:42:47 _log [chan 2] sftp session closed.
83+
INFO 2019-07-12 17:00:08 _log Connected (version 2.0, client OpenSSH_7.4)
84+
INFO 2019-07-12 17:00:08 _log Authentication (publickey) successful!
85+
INFO 2019-07-12 17:00:09 _log [chan 2] Opened sftp connection (server version 3)
86+
INFO 2019-07-12 17:00:09 _log [chan 2] sftp session closed.
87+
INFO 2019-07-12 17:00:10 _log Connected (version 2.0, client OpenSSH_7.4)
88+
INFO 2019-07-12 17:00:10 _log Authentication (publickey) successful!
89+
INFO 2019-07-12 17:00:11 _log [chan 2] Opened sftp connection (server version 3)
90+
INFO 2019-07-12 17:00:11 _log [chan 2] sftp session closed.
91+
INFO 2019-07-12 17:00:12 _log Connected (version 2.0, client OpenSSH_7.4)
92+
INFO 2019-07-12 17:00:12 _log Authentication (publickey) successful!
93+
INFO 2019-07-12 17:00:12 _log [chan 2] Opened sftp connection (server version 3)
94+
INFO 2019-07-12 17:00:13 _log [chan 2] sftp session closed.
95+
INFO 2019-07-12 17:00:13 _log Connected (version 2.0, client OpenSSH_7.4)
96+
INFO 2019-07-12 17:00:13 _log Authentication (publickey) successful!
97+
INFO 2019-07-12 17:00:14 _log [chan 2] Opened sftp connection (server version 3)
98+
INFO 2019-07-12 17:00:15 _log [chan 2] sftp session closed.
99+
INFO 2019-07-12 17:00:15 _log Connected (version 2.0, client OpenSSH_7.4)
100+
INFO 2019-07-12 17:00:15 _log Authentication (publickey) successful!
101+
INFO 2019-07-12 17:00:16 _log [chan 2] Opened sftp connection (server version 3)
102+
INFO 2019-07-12 17:00:16 _log [chan 2] sftp session closed.

projs/models.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,19 @@ class Project(models.Model):
1212
project_name = models.CharField(max_length=64, verbose_name='项目名称')
1313
project_env = models.CharField(max_length=4, choices=project_envs, verbose_name='项目环境', default='test')
1414
project_web = models.CharField(max_length=64, blank=True, verbose_name='项目网址', default='')
15-
project_admin = models.ForeignKey('users.UserProfile', verbose_name='项目负责人', on_delete=models.PROTECT)
15+
project_admin = models.ForeignKey('users.UserProfile', related_name='proj_admin', verbose_name='项目负责人',
16+
on_delete=models.PROTECT)
17+
project_member = models.ManyToManyField('users.UserProfile', related_name='proj_member', blank=True,
18+
verbose_name='项目成员')
1619
project_org = models.TextField(blank=True, default='', verbose_name='项目架构JSON数据')
1720
project_memo = models.TextField(blank=True, verbose_name='项目描述', default='')
1821

1922
class Meta:
2023
db_table = 'ops_project'
24+
permissions = (
25+
("view_project", "读取项目列表权限"),
26+
("deploy_project", "代码发布权限"),
27+
)
2128
verbose_name = '项目表'
2229
verbose_name_plural = '项目表'
2330
unique_together = ("project_env", "project_name")

projs/views.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from projs.models import *
77
from users.models import UserProfile
88
from assets.models import Assets, ServerAssets
9-
from utils.decorators import admin_auth
9+
from utils.decorators import admin_auth, deploy_auth
1010
from projs.utils.git_tools import GitTools
1111
from projs.utils.svn_tools import SVNTools
1212
from django.contrib.auth.decorators import permission_required
@@ -16,7 +16,7 @@
1616
def proj_list(request):
1717
projects = Project.objects.select_related('project_admin').all()
1818
project_envs = Project.project_envs
19-
project_admins = UserProfile.objects.all()
19+
project_users = UserProfile.objects.all()
2020
return render(request, 'projs/proj_list.html', locals())
2121

2222

@@ -58,13 +58,16 @@ def proj_config(request):
5858
return render(request, 'projs/proj_config.html', locals())
5959

6060

61-
@admin_auth
61+
@permission_required('projs.deploy_project', raise_exception=True)
6262
def config_list(request):
63-
configs = ProjectConfig.objects.select_related('project').all()
63+
user = request.user
64+
projects = user.proj_admin.all() | user.proj_member.all()
65+
configs = ProjectConfig.objects.select_related('project').all() if user.is_superuser else \
66+
[project.projectconfig for project in projects if hasattr(project, 'projectconfig')]
6467
return render(request, 'projs/config_list.html', locals())
6568

6669

67-
@admin_auth
70+
@deploy_auth
6871
def deploy(request, pk):
6972
config = ProjectConfig.objects.select_related('project').get(id=pk)
7073
if request.method == 'GET':

0 commit comments

Comments
 (0)