permissions per page and add dam.rasadyar.com in allowed hosts
This commit is contained in:
@@ -34,6 +34,7 @@ ALLOWED_HOSTS = [
|
|||||||
'https://localhost:9200',
|
'https://localhost:9200',
|
||||||
'https://api.rasadyaar.net',
|
'https://api.rasadyaar.net',
|
||||||
'https://api.dam.rasadyaar.net',
|
'https://api.dam.rasadyaar.net',
|
||||||
|
'https://dam.rasadyar.net/'
|
||||||
'http://localhost:3000',
|
'http://localhost:3000',
|
||||||
'http://192.168.88.130:3000',
|
'http://192.168.88.130:3000',
|
||||||
'https://rasaddam-front.liara.run'
|
'https://rasaddam-front.liara.run'
|
||||||
@@ -291,7 +292,8 @@ CORS_ALLOWED_ORIGINS = (
|
|||||||
'http://localhost:3000',
|
'http://localhost:3000',
|
||||||
'http://192.168.88.130:3000',
|
'http://192.168.88.130:3000',
|
||||||
'https://rasadyar.net',
|
'https://rasadyar.net',
|
||||||
'https://rasaddam-front.liara.run'
|
'https://rasaddam-front.liara.run',
|
||||||
|
'https://dam.rasadyar.net/'
|
||||||
)
|
)
|
||||||
|
|
||||||
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
|
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ from apps.authorization.api.v1.serializers import (
|
|||||||
PermissionSerializer,
|
PermissionSerializer,
|
||||||
UserRelationSerializer
|
UserRelationSerializer
|
||||||
)
|
)
|
||||||
|
from rest_framework.decorators import action
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from apps.authorization.models import (
|
from apps.authorization.models import (
|
||||||
Role,
|
Role,
|
||||||
@@ -12,6 +13,7 @@ from apps.authorization.models import (
|
|||||||
UserRelations
|
UserRelations
|
||||||
)
|
)
|
||||||
from rest_framework import viewsets
|
from rest_framework import viewsets
|
||||||
|
from django.db import transaction
|
||||||
|
|
||||||
|
|
||||||
class RoleViewSet(viewsets.ModelViewSet):
|
class RoleViewSet(viewsets.ModelViewSet):
|
||||||
@@ -27,6 +29,17 @@ class PermissionViewSet(viewsets.ModelViewSet):
|
|||||||
queryset = Permissions.objects.all()
|
queryset = Permissions.objects.all()
|
||||||
serializer_class = PermissionSerializer
|
serializer_class = PermissionSerializer
|
||||||
|
|
||||||
|
@action(
|
||||||
|
methods=['get'],
|
||||||
|
detail=False,
|
||||||
|
url_path='get_user_permissions',
|
||||||
|
url_name='get_user_permissions',
|
||||||
|
name='get_user_permissions'
|
||||||
|
)
|
||||||
|
@transaction.atomic
|
||||||
|
def get_user_permissions(self, request):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class UserRelationViewSet(viewsets.ModelViewSet):
|
class UserRelationViewSet(viewsets.ModelViewSet):
|
||||||
""" Crud Operations for User Relations """
|
""" Crud Operations for User Relations """
|
||||||
|
|||||||
@@ -14,9 +14,17 @@ class PermissionSerializer(serializers.ModelSerializer):
|
|||||||
fields = [
|
fields = [
|
||||||
'id',
|
'id',
|
||||||
'name',
|
'name',
|
||||||
'description'
|
'description',
|
||||||
|
'category',
|
||||||
|
'page'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def to_representation(self, instance):
|
||||||
|
representation = super().to_representation(instance)
|
||||||
|
representation['name'] = 'Hello'
|
||||||
|
|
||||||
|
return representation
|
||||||
|
|
||||||
|
|
||||||
class RoleSerializer(serializers.ModelSerializer):
|
class RoleSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
@@ -63,7 +71,14 @@ class UserRelationSerializer(serializers.ModelSerializer):
|
|||||||
if instance.role:
|
if instance.role:
|
||||||
representation['role'] = RoleSerializer(instance.role).data
|
representation['role'] = RoleSerializer(instance.role).data
|
||||||
if instance.permissions:
|
if instance.permissions:
|
||||||
representation['permissions'] = PermissionSerializer(instance.permissions, many=True).data
|
permissions = instance.permissions.all()
|
||||||
|
pages = {}
|
||||||
|
for permission in permissions:
|
||||||
|
if permission.page.name not in pages.keys():
|
||||||
|
pages.update({
|
||||||
|
f'{permission.page.name}': permission.page.permission_page.all().values('name')
|
||||||
|
})
|
||||||
|
representation['perms'] = pages
|
||||||
|
|
||||||
return representation
|
return representation
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
# Generated by Django 5.0 on 2025-05-31 12:01
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('authorization', '0014_permissions_creator_info_permissions_modifier_info_and_more'),
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='permissions',
|
||||||
|
name='category',
|
||||||
|
field=models.CharField(choices=[('api', 'Api'), ('page', 'Page َAccess'), ('element', 'UI Element'), ('feature', 'Feature / Action')], default='api', max_length=50),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='permissions',
|
||||||
|
name='meta',
|
||||||
|
field=models.JSONField(default=dict),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Page',
|
||||||
|
fields=[
|
||||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('create_date', models.DateTimeField(auto_now_add=True)),
|
||||||
|
('modify_date', models.DateTimeField(auto_now=True)),
|
||||||
|
('creator_info', models.CharField(max_length=100, null=True)),
|
||||||
|
('modifier_info', models.CharField(max_length=100, null=True)),
|
||||||
|
('trash', models.BooleanField(default=False)),
|
||||||
|
('code', models.CharField(max_length=100, unique=True)),
|
||||||
|
('name', models.CharField(max_length=255)),
|
||||||
|
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_createddby', to=settings.AUTH_USER_MODEL)),
|
||||||
|
('modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_modifiedby', to=settings.AUTH_USER_MODEL)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='permissions',
|
||||||
|
name='page',
|
||||||
|
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='permission_page', to='authorization.page'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -5,9 +5,42 @@ from apps.core.models import BaseModel
|
|||||||
|
|
||||||
# Create your models here.
|
# Create your models here.
|
||||||
|
|
||||||
|
class Page(BaseModel):
|
||||||
|
""" every front-end page on system """
|
||||||
|
|
||||||
|
code = models.CharField(max_length=100, unique=True)
|
||||||
|
name = models.CharField(max_length=255)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f'{self.name}-{self.code}'
|
||||||
|
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
super(Page, self).save(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class Permissions(BaseModel):
|
class Permissions(BaseModel):
|
||||||
|
""" permission level of users """
|
||||||
|
|
||||||
name = models.CharField(max_length=50)
|
name = models.CharField(max_length=50)
|
||||||
description = models.TextField(max_length=500)
|
description = models.TextField(max_length=500)
|
||||||
|
category_choices = (
|
||||||
|
('api', 'Api'),
|
||||||
|
('page', 'Page َAccess'),
|
||||||
|
('element', 'UI Element'),
|
||||||
|
('feature', 'Feature / Action')
|
||||||
|
)
|
||||||
|
category = models.CharField(
|
||||||
|
max_length=50,
|
||||||
|
choices=category_choices,
|
||||||
|
default='api'
|
||||||
|
)
|
||||||
|
meta = models.JSONField(default=dict)
|
||||||
|
page = models.ForeignKey(
|
||||||
|
Page,
|
||||||
|
on_delete=models.CASCADE,
|
||||||
|
related_name='permission_page',
|
||||||
|
null=True
|
||||||
|
)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f'{self.name}-{self.description}'
|
return f'{self.name}-{self.description}'
|
||||||
|
|||||||
18
apps/tag/migrations/0022_alter_tagassignment_status.py
Normal file
18
apps/tag/migrations/0022_alter_tagassignment_status.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 5.0 on 2025-05-31 12:01
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('tag', '0021_allocatedtags_species_code'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='tagassignment',
|
||||||
|
name='status',
|
||||||
|
field=models.CharField(choices=[('A', 'Accept'), ('W', 'Waiting'), ('C', 'Cancel'), ('E', 'Exited')], default='W', max_length=1),
|
||||||
|
),
|
||||||
|
]
|
||||||
Reference in New Issue
Block a user