Skip to content
Snippets Groups Projects
Commit a96e98ca authored by Tomáš Valenta's avatar Tomáš Valenta
Browse files

fix permissions mixin

parent a7b72f5e
Branches
No related tags found
1 merge request!3Release
...@@ -42,16 +42,14 @@ class IndexHiddenModelAdmin(MarkdownxGuardedModelAdmin): ...@@ -42,16 +42,14 @@ class IndexHiddenModelAdmin(MarkdownxGuardedModelAdmin):
def permissions_mixin_factory( def permissions_mixin_factory(
change_permission: str, change_permission: str,
delete_permission: str, delete_permission: str,
obj_conditional: typing.Callable, obj_conditional: typing.Callable = lambda request, obj: True
change_attr_func: typing.Callable = lambda obj: obj,
delete_attr_func: typing.Callable = lambda obj: obj,
) -> object: ) -> object:
class Mixin: class Mixin:
def has_change_permission(self, request, obj=None) -> bool: def has_change_permission(self, request, obj=None) -> bool:
if ( if (
obj is not None obj is not None
and obj_conditional(request, obj) and obj_conditional(request, obj)
and not request.user.has_perm(change_permission, change_attr_func(obj)) and not request.user.has_perm(change_permission)
): ):
return False return False
...@@ -61,7 +59,7 @@ def permissions_mixin_factory( ...@@ -61,7 +59,7 @@ def permissions_mixin_factory(
if ( if (
obj is not None obj is not None
and obj_conditional(request, obj) and obj_conditional(request, obj)
and not request.user.has_perm(delete_permission, delete_attr_func(obj)) and not request.user.has_perm(change_permission)
): ):
return False return False
...@@ -70,14 +68,14 @@ def permissions_mixin_factory( ...@@ -70,14 +68,14 @@ def permissions_mixin_factory(
return Mixin return Mixin
get_obj_contract = lambda obj: obj.contract get_obj_contract = lambda request, obj: obj.contract
class OwnPermissionsMixin( class OwnPermissionsMixin(
permissions_mixin_factory( permissions_mixin_factory(
"contracts.edit_others", "contracts.edit_others",
"contracts.delete_others", "contracts.delete_others",
lambda request, obj: obj.created_by != request.user, obj_conditional=lambda request, obj: obj.created_by != request.user,
) )
): ):
def save_model(self, request, obj, form, change): def save_model(self, request, obj, form, change):
...@@ -90,18 +88,14 @@ class OwnPermissionsMixin( ...@@ -90,18 +88,14 @@ class OwnPermissionsMixin(
ParentContractApprovedPermissionsMixin = permissions_mixin_factory( ParentContractApprovedPermissionsMixin = permissions_mixin_factory(
"contracts.edit_when_approved", "contracts.edit_when_approved",
"contracts.delete_when_approved", "contracts.delete_when_approved",
lambda request, obj: get_obj_contract(obj).is_approved, obj_conditional=lambda request, obj: get_obj_contract(obj).is_approved,
get_obj_contract,
get_obj_contract,
) )
ParentContractOwnPermissionsMixin = permissions_mixin_factory( ParentContractOwnPermissionsMixin = permissions_mixin_factory(
"contracts.edit_others", "contracts.edit_others",
"contracts.delete_others", "contracts.delete_others",
lambda request, obj: get_obj_contract(obj).created_by != request.user, obj_conditional=lambda request, obj: get_obj_contract(obj).created_by != request.user,
get_obj_contract,
get_obj_contract,
) )
...@@ -162,7 +156,7 @@ class ContractAdmin( ...@@ -162,7 +156,7 @@ class ContractAdmin(
permissions_mixin_factory( permissions_mixin_factory(
"contracts.edit_when_approved", "contracts.edit_when_approved",
"contracts.delete_when_approved", "contracts.delete_when_approved",
lambda request, obj: obj.is_approved, obj_conditional=lambda request, obj: obj.is_approved,
), ),
MarkdownxGuardedModelAdmin, MarkdownxGuardedModelAdmin,
NestedModelAdmin, NestedModelAdmin,
...@@ -494,8 +488,8 @@ class SigneeAdmin(OwnPermissionsMixin, MarkdownxGuardedModelAdmin): ...@@ -494,8 +488,8 @@ class SigneeAdmin(OwnPermissionsMixin, MarkdownxGuardedModelAdmin):
load_ares_data_button.short_description = "ARES" load_ares_data_button.short_description = "ARES"
get_obj_signee_contract = lambda obj: obj.signee.contract get_obj_signee_contract = lambda request, obj: obj.signee.contract
get_obj_contractee_contract = lambda obj: obj.contractee.contract get_obj_contractee_contract = lambda request, obj: obj.contractee.contract
class SigneeSignatureRepresentativeAdmin( class SigneeSignatureRepresentativeAdmin(
...@@ -503,17 +497,12 @@ class SigneeSignatureRepresentativeAdmin( ...@@ -503,17 +497,12 @@ class SigneeSignatureRepresentativeAdmin(
permissions_mixin_factory( permissions_mixin_factory(
"contracts.edit_when_approved", "contracts.edit_when_approved",
"contracts.delete_when_approved", "contracts.delete_when_approved",
lambda request, obj: get_obj_signee_contract(obj).is_approved, obj_conditional=lambda request, obj: get_obj_signee_contract(obj).is_approved,
get_obj_signee_contract,
get_obj_signee_contract,
), ),
permissions_mixin_factory( permissions_mixin_factory(
"contracts.edit_others", "contracts.edit_others",
"contracts.delete_others", "contracts.delete_others",
lambda request, obj: get_obj_contractee_contract(obj).created_by obj_conditional=lambda request, obj: get_obj_contractee_contract(obj).created_by != request.user,
!= request.user,
get_obj_signee_contract,
get_obj_signee_contract,
), ),
): ):
pass pass
...@@ -524,17 +513,12 @@ class ContracteeSignatureRepresentativeAdmin( ...@@ -524,17 +513,12 @@ class ContracteeSignatureRepresentativeAdmin(
permissions_mixin_factory( permissions_mixin_factory(
"contracts.edit_when_approved", "contracts.edit_when_approved",
"contracts.delete_when_approved", "contracts.delete_when_approved",
lambda request, obj: get_obj_contractee_contract(obj).is_approved, obj_conditional=lambda request, obj: get_obj_contractee_contract(obj).is_approved,
get_obj_contractee_contract,
get_obj_contractee_contract,
), ),
permissions_mixin_factory( permissions_mixin_factory(
"contracts.edit_others", "contracts.edit_others",
"contracts.delete_others", "contracts.delete_others",
lambda request, obj: get_obj_contractee_contract(obj).created_by obj_conditional=lambda request, obj: get_obj_contractee_contract(obj).created_by != request.user,
!= request.user,
get_obj_contractee_contract,
get_obj_contractee_contract,
), ),
): ):
pass pass
......
# Generated by Django 4.1.4 on 2023-05-01 20:29
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('contracts', '0058_alter_contract_options_alter_contractee_options_and_more'),
]
operations = [
migrations.AlterField(
model_name='contract',
name='is_valid',
field=models.BooleanField(default=False, help_text='Právní vztah vyplývající ze smlouvy je aktuálně účinný a platný', verbose_name='Je právně platná'),
),
]
...@@ -564,6 +564,7 @@ class Contract(NameStrMixin, models.Model): ...@@ -564,6 +564,7 @@ class Contract(NameStrMixin, models.Model):
is_valid = models.BooleanField( is_valid = models.BooleanField(
default=False, default=False,
verbose_name="Je právně platná", verbose_name="Je právně platná",
help_text="Právní vztah vyplývající ze smlouvy je aktuálně účinný a platný",
) )
is_public = models.BooleanField( is_public = models.BooleanField(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment