mirror of https://github.com/openspug/spug
U api update
parent
f813610116
commit
ca63dcb62e
|
@ -28,6 +28,22 @@ class User(models.Model, ModelMixin):
|
|||
def verify_password(self, plain_password: str) -> bool:
|
||||
return check_password(plain_password, self.password_hash)
|
||||
|
||||
@property
|
||||
def page_perms(self):
|
||||
if self.role.page_perms:
|
||||
data = []
|
||||
perms = json.loads(self.role.page_perms)
|
||||
for m, v in perms.items():
|
||||
for p, d in v.items():
|
||||
data.extend(f'{m}.{p}.{x}' for x in d)
|
||||
return data
|
||||
else:
|
||||
return []
|
||||
|
||||
@property
|
||||
def deploy_perms(self):
|
||||
return json.loads(self.role.deploy_perms) if self.role.deploy_perms else {'apps': [], 'envs': []}
|
||||
|
||||
def has_perms(self, codes):
|
||||
# return self.is_supper or self.role in codes
|
||||
return self.is_supper
|
||||
|
@ -49,22 +65,6 @@ class Role(models.Model, ModelMixin):
|
|||
created_at = models.CharField(max_length=20, default=human_datetime)
|
||||
created_by = models.ForeignKey(User, on_delete=models.PROTECT, related_name='+')
|
||||
|
||||
@property
|
||||
def permissions(self):
|
||||
if self.page_perms:
|
||||
data = []
|
||||
perms = json.loads(self.page_perms)
|
||||
for m, v in perms.items():
|
||||
for p, d in v.items():
|
||||
data.extend(f'{m}.{p}.{x}' for x in d)
|
||||
return data
|
||||
else:
|
||||
return []
|
||||
|
||||
@property
|
||||
def deploy(self):
|
||||
return json.loads(self.deploy_perms) if self.deploy_perms else {'apps': [], 'envs': []}
|
||||
|
||||
def to_dict(self, *args, **kwargs):
|
||||
tmp = super().to_dict(*args, **kwargs)
|
||||
tmp['page_perms'] = json.loads(self.page_perms) if self.page_perms else None
|
||||
|
|
|
@ -129,7 +129,7 @@ def login(request):
|
|||
'nickname': user.nickname,
|
||||
'is_supper': user.is_supper,
|
||||
'has_real_ip': True if x_real_ip else False,
|
||||
'permissions': [] if user.is_supper else user.role.permissions
|
||||
'permissions': [] if user.is_supper else user.page_perms
|
||||
})
|
||||
|
||||
value = cache.get_or_set(form.username, 0, 86400)
|
||||
|
|
|
@ -9,7 +9,10 @@ import json
|
|||
|
||||
class AppView(View):
|
||||
def get(self, request):
|
||||
apps = App.objects.all()
|
||||
query = {}
|
||||
if not request.user.is_supper:
|
||||
query['id__in'] = request.user.deploy_perms['apps']
|
||||
apps = App.objects.filter(**query)
|
||||
return json_response(apps)
|
||||
|
||||
def post(self, request):
|
||||
|
@ -62,6 +65,10 @@ class DeployView(View):
|
|||
form, error = JsonParser(
|
||||
Argument('app_id', type=int, required=False)
|
||||
).parse(request.GET, True)
|
||||
if not request.user.is_supper:
|
||||
perms = request.user.deploy_perms
|
||||
form.app_id__in = perms['apps']
|
||||
form.env_id__in = perms['envs']
|
||||
deploys = Deploy.objects.filter(**form).annotate(app_name=F('app__name'))
|
||||
return json_response(deploys)
|
||||
|
||||
|
|
|
@ -7,7 +7,10 @@ import json
|
|||
|
||||
class EnvironmentView(View):
|
||||
def get(self, request):
|
||||
envs = Environment.objects.all()
|
||||
query = {}
|
||||
if not request.user.is_supper:
|
||||
query['id__in'] = request.user.deploy_perms['envs']
|
||||
envs = Environment.objects.filter(**query)
|
||||
return json_response(envs)
|
||||
|
||||
def post(self, request):
|
||||
|
|
|
@ -13,8 +13,12 @@ import uuid
|
|||
|
||||
class RequestView(View):
|
||||
def get(self, request):
|
||||
data = []
|
||||
for item in DeployRequest.objects.annotate(
|
||||
data, query = [], {}
|
||||
if not request.user.is_supper:
|
||||
perms = request.user.deploy_perms
|
||||
query['deploy__app_id__in'] = perms['apps']
|
||||
query['deploy__env_id__in'] = perms['envs']
|
||||
for item in DeployRequest.objects.filter(**query).annotate(
|
||||
env_name=F('deploy__env__name'),
|
||||
app_name=F('deploy__app__name'),
|
||||
app_host_ids=F('deploy__host_ids'),
|
||||
|
@ -102,7 +106,7 @@ class RequestDetailView(View):
|
|||
def get(self, request, r_id):
|
||||
req = DeployRequest.objects.filter(pk=r_id).first()
|
||||
if not req:
|
||||
return json_response(error='为找到指定发布申请')
|
||||
return json_response(error='未找到指定发布申请')
|
||||
hosts = Host.objects.filter(id__in=json.loads(req.host_ids))
|
||||
targets = [{'id': x.id, 'title': f'{x.name}({x.hostname}:{x.port})'} for x in hosts]
|
||||
server_actions, host_actions = [], []
|
||||
|
@ -121,7 +125,12 @@ class RequestDetailView(View):
|
|||
})
|
||||
|
||||
def post(self, request, r_id):
|
||||
req = DeployRequest.objects.filter(pk=r_id).first()
|
||||
query = {'pk': r_id}
|
||||
if not request.user.is_supper:
|
||||
perms = request.user.deploy_perms
|
||||
query['deploy__app_id__in'] = perms['apps']
|
||||
query['deploy__env_id__in'] = perms['envs']
|
||||
req = DeployRequest.objects.filter(**query).first()
|
||||
if not req:
|
||||
return json_response(error='未找到指定发布申请')
|
||||
if req.status not in ('1', '-3'):
|
||||
|
|
Loading…
Reference in New Issue