feat: 授权规则分类管理

pull/6745/head
feng626 2021-08-31 14:13:05 +08:00
parent ae80797ce4
commit 4214b220e1
8 changed files with 50 additions and 10 deletions

9
apps/perms/const.py Normal file
View File

@ -0,0 +1,9 @@
# -*- coding: utf-8 -*-
#
from django.db.models import TextChoices
from django.utils.translation import ugettext_lazy as _
class AuthorizationRules(TextChoices):
manual = 'manual', _('Manual authorization')
ticket = 'ticket', _('Ticket authorization')

View File

@ -0,0 +1,23 @@
# Generated by Django 3.1.12 on 2021-08-31 03:50
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('perms', '0018_auto_20210208_1515'),
]
operations = [
migrations.AddField(
model_name='applicationpermission',
name='authorization_rules',
field=models.CharField(choices=[('manual', 'Manual authorization'), ('ticket', 'Ticket authorization')], default='manual', max_length=64, verbose_name='Authorization rules'),
),
migrations.AddField(
model_name='assetpermission',
name='authorization_rules',
field=models.CharField(choices=[('manual', 'Manual authorization'), ('ticket', 'Ticket authorization')], default='manual', max_length=64, verbose_name='Authorization rules'),
),
]

View File

@ -11,7 +11,7 @@ from orgs.mixins.models import OrgModelMixin
from common.db.models import UnionQuerySet from common.db.models import UnionQuerySet
from common.utils import date_expired_default, lazyproperty from common.utils import date_expired_default, lazyproperty
from orgs.mixins.models import OrgManager from orgs.mixins.models import OrgManager
from ..const import AuthorizationRules
__all__ = [ __all__ = [
'BasePermission', 'BasePermissionQuerySet' 'BasePermission', 'BasePermissionQuerySet'
@ -31,11 +31,7 @@ class BasePermissionQuerySet(models.QuerySet):
def invalid(self): def invalid(self):
now = timezone.now() now = timezone.now()
q = ( q = (Q(is_active=False) | Q(date_start__gt=now) | Q(date_expired__lt=now))
Q(is_active=False) |
Q(date_start__gt=now) |
Q(date_expired__lt=now)
)
return self.filter(q) return self.filter(q)
@ -48,13 +44,17 @@ class BasePermission(OrgModelMixin):
id = models.UUIDField(default=uuid.uuid4, primary_key=True) 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'))
users = models.ManyToManyField('users.User', blank=True, verbose_name=_("User"), related_name='%(class)ss') users = models.ManyToManyField('users.User', blank=True, verbose_name=_("User"), related_name='%(class)ss')
user_groups = models.ManyToManyField('users.UserGroup', blank=True, verbose_name=_("User group"), related_name='%(class)ss') user_groups = models.ManyToManyField(
'users.UserGroup', blank=True, verbose_name=_("User group"), related_name='%(class)ss')
is_active = models.BooleanField(default=True, verbose_name=_('Active')) is_active = models.BooleanField(default=True, verbose_name=_('Active'))
date_start = models.DateTimeField(default=timezone.now, db_index=True, verbose_name=_("Date start")) date_start = models.DateTimeField(default=timezone.now, db_index=True, verbose_name=_("Date start"))
date_expired = models.DateTimeField(default=date_expired_default, db_index=True, verbose_name=_('Date expired')) date_expired = models.DateTimeField(default=date_expired_default, db_index=True, verbose_name=_('Date expired'))
created_by = models.CharField(max_length=128, blank=True, verbose_name=_('Created by')) created_by = models.CharField(max_length=128, blank=True, verbose_name=_('Created by'))
date_created = models.DateTimeField(auto_now_add=True, verbose_name=_('Date created')) date_created = models.DateTimeField(auto_now_add=True, verbose_name=_('Date created'))
comment = models.TextField(verbose_name=_('Comment'), blank=True) comment = models.TextField(verbose_name=_('Comment'), blank=True)
authorization_rules = models.CharField(
max_length=64, default=AuthorizationRules.manual, choices=AuthorizationRules.choices,
verbose_name=_('Authorization rules'))
objects = BasePermissionManager.from_queryset(BasePermissionQuerySet)() objects = BasePermissionManager.from_queryset(BasePermissionQuerySet)()

View File

@ -13,6 +13,8 @@ __all__ = [
class ApplicationPermissionSerializer(BulkOrgResourceModelSerializer): class ApplicationPermissionSerializer(BulkOrgResourceModelSerializer):
authorization_rules_display = serializers.ReadOnlyField(
source='get_authorization_rules_display', label=_('Authorization rules'))
category_display = serializers.ReadOnlyField(source='get_category_display', label=_('Category display')) category_display = serializers.ReadOnlyField(source='get_category_display', label=_('Category display'))
type_display = serializers.ReadOnlyField(source='get_type_display', label=_('Type display')) type_display = serializers.ReadOnlyField(source='get_type_display', label=_('Type display'))
is_valid = serializers.BooleanField(read_only=True, label=_('Is valid')) is_valid = serializers.BooleanField(read_only=True, label=_('Is valid'))
@ -24,7 +26,7 @@ class ApplicationPermissionSerializer(BulkOrgResourceModelSerializer):
fields_small = fields_mini + [ fields_small = fields_mini + [
'category', 'category_display', 'type', 'type_display', 'category', 'category_display', 'type', 'type_display',
'is_active', 'is_expired', 'is_valid', 'is_active', 'is_expired', 'is_valid',
'created_by', 'date_created', 'date_expired', 'date_start', 'comment' 'created_by', 'date_created', 'date_expired', 'date_start', 'comment', 'authorization_rules_display'
] ]
fields_m2m = [ fields_m2m = [
'users', 'user_groups', 'applications', 'system_users', 'users', 'user_groups', 'applications', 'system_users',

View File

@ -39,6 +39,8 @@ class ActionsDisplayField(ActionsField):
class AssetPermissionSerializer(BulkOrgResourceModelSerializer): class AssetPermissionSerializer(BulkOrgResourceModelSerializer):
actions = ActionsField(required=False, allow_null=True, label=_("Actions")) actions = ActionsField(required=False, allow_null=True, label=_("Actions"))
authorization_rules_display = serializers.ReadOnlyField(
source='get_authorization_rules_display', label=_('Authorization rules'))
is_valid = serializers.BooleanField(read_only=True, label=_("Is valid")) is_valid = serializers.BooleanField(read_only=True, label=_("Is valid"))
is_expired = serializers.BooleanField(read_only=True, label=_('Is expired')) is_expired = serializers.BooleanField(read_only=True, label=_('Is expired'))
users_display = serializers.ListField(child=serializers.CharField(), label=_('Users display'), required=False) users_display = serializers.ListField(child=serializers.CharField(), label=_('Users display'), required=False)
@ -53,7 +55,7 @@ class AssetPermissionSerializer(BulkOrgResourceModelSerializer):
fields_small = fields_mini + [ fields_small = fields_mini + [
'is_active', 'is_expired', 'is_valid', 'actions', 'is_active', 'is_expired', 'is_valid', 'actions',
'created_by', 'date_created', 'date_expired', 'created_by', 'date_created', 'date_expired',
'date_start', 'comment' 'date_start', 'comment', 'authorization_rules_display'
] ]
fields_m2m = [ fields_m2m = [
'users', 'users_display', 'user_groups', 'user_groups_display', 'assets', 'users', 'users_display', 'user_groups', 'user_groups_display', 'assets',

View File

@ -3,6 +3,7 @@ from orgs.utils import tmp_to_org, tmp_to_root_org
from applications.const import AppCategory, AppType from applications.const import AppCategory, AppType
from applications.models import Application from applications.models import Application
from perms.models import ApplicationPermission from perms.models import ApplicationPermission
from perms.const import AuthorizationRules
from assets.models import SystemUser from assets.models import SystemUser
from .base import BaseHandler from .base import BaseHandler
@ -89,6 +90,7 @@ class Handler(BaseHandler):
permissions_data = { permissions_data = {
'id': self.ticket.id, 'id': self.ticket.id,
'name': apply_permission_name, 'name': apply_permission_name,
'authorization_rules': AuthorizationRules.ticket,
'category': apply_category, 'category': apply_category,
'type': apply_type, 'type': apply_type,
'comment': str(permission_comment), 'comment': str(permission_comment),

View File

@ -5,6 +5,7 @@ from .base import BaseHandler
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from perms.models import AssetPermission, Action from perms.models import AssetPermission, Action
from perms.const import AuthorizationRules
from orgs.utils import tmp_to_org, tmp_to_root_org from orgs.utils import tmp_to_org, tmp_to_root_org
@ -83,6 +84,7 @@ class Handler(BaseHandler):
permission_data = { permission_data = {
'id': self.ticket.id, 'id': self.ticket.id,
'name': apply_permission_name, 'name': apply_permission_name,
'authorization_rules': AuthorizationRules.ticket,
'comment': str(permission_comment), 'comment': str(permission_comment),
'created_by': permission_created_by, 'created_by': permission_created_by,
'actions': apply_actions, 'actions': apply_actions,

View File

@ -108,7 +108,7 @@ class Migration(migrations.Migration):
('strategy', models.CharField( ('strategy', models.CharField(
choices=[('super_admin', 'Super admin'), ('org_admin', 'Org admin'), ('super_org_admin', 'Super admin and org admin'), choices=[('super_admin', 'Super admin'), ('org_admin', 'Org admin'), ('super_org_admin', 'Super admin and org admin'),
('custom_user', 'Custom user')], ('custom_user', 'Custom user')],
default='super', max_length=64, verbose_name='Approve strategy')), default='super_admin', max_length=64, verbose_name='Approve strategy')),
('assignees_display', models.JSONField(default=list, encoder=common.db.encoder.ModelJSONFieldEncoder, ('assignees_display', models.JSONField(default=list, encoder=common.db.encoder.ModelJSONFieldEncoder,
verbose_name='Assignees display')), verbose_name='Assignees display')),
('assignees', ('assignees',