Compare commits
	
		
			2 Commits
		
	
	
		
			providers/
			...
			policies-e
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ad9b5e98ba | |||
| e4a21c824a | 
| @ -78,6 +78,7 @@ class PolicyBindingSerializer(ModelSerializer): | ||||
|             "negate", | ||||
|             "enabled", | ||||
|             "order", | ||||
|             "honor_order", | ||||
|             "timeout", | ||||
|             "failure_result", | ||||
|         ] | ||||
| @ -110,7 +111,16 @@ class PolicyBindingFilter(FilterSet): | ||||
|  | ||||
|     class Meta: | ||||
|         model = PolicyBinding | ||||
|         fields = ["policy", "policy__isnull", "target", "target_in", "enabled", "order", "timeout"] | ||||
|         fields = [ | ||||
|             "policy", | ||||
|             "policy__isnull", | ||||
|             "target", | ||||
|             "target_in", | ||||
|             "enabled", | ||||
|             "order", | ||||
|             "honor_order", | ||||
|             "timeout", | ||||
|         ] | ||||
|  | ||||
|  | ||||
| class PolicyBindingViewSet(UsedByMixin, ModelViewSet): | ||||
|  | ||||
| @ -0,0 +1,40 @@ | ||||
| # Generated by Django 5.1.8 on 2025-04-17 15:13 | ||||
|  | ||||
| from django.conf import settings | ||||
| from django.db import migrations, models | ||||
|  | ||||
|  | ||||
| class Migration(migrations.Migration): | ||||
|  | ||||
|     dependencies = [ | ||||
|         ("authentik_core", "0047_delete_oldauthenticatedsession"), | ||||
|         ("authentik_policies", "0011_policybinding_failure_result_and_more"), | ||||
|         migrations.swappable_dependency(settings.AUTH_USER_MODEL), | ||||
|     ] | ||||
|  | ||||
|     operations = [ | ||||
|         migrations.AddConstraint( | ||||
|             model_name="policybinding", | ||||
|             constraint=models.CheckConstraint( | ||||
|                 condition=models.Q( | ||||
|                     models.Q( | ||||
|                         ("policy_id__isnull", False), | ||||
|                         ("group_id__isnull", True), | ||||
|                         ("user_id__isnull", True), | ||||
|                     ), | ||||
|                     models.Q( | ||||
|                         ("group_id__isnull", False), | ||||
|                         ("policy_id__isnull", True), | ||||
|                         ("user_id__isnull", True), | ||||
|                     ), | ||||
|                     models.Q( | ||||
|                         ("user_id__isnull", False), | ||||
|                         ("policy_id__isnull", True), | ||||
|                         ("group_id__isnull", True), | ||||
|                     ), | ||||
|                     _connector="OR", | ||||
|                 ), | ||||
|                 name="authentik_policies_policybinding_only_one_type", | ||||
|             ), | ||||
|         ), | ||||
|     ] | ||||
| @ -0,0 +1,20 @@ | ||||
| # Generated by Django 5.1.8 on 2025-04-17 15:16 | ||||
|  | ||||
| from django.db import migrations, models | ||||
|  | ||||
|  | ||||
| class Migration(migrations.Migration): | ||||
|  | ||||
|     dependencies = [ | ||||
|         ("authentik_policies", "0012_policybinding_authentik_policies_policybinding_only_one_type"), | ||||
|     ] | ||||
|  | ||||
|     operations = [ | ||||
|         migrations.AddField( | ||||
|             model_name="policybinding", | ||||
|             name="honor_order", | ||||
|             field=models.BooleanField( | ||||
|                 default=False, help_text="Honor order when evaluating policies." | ||||
|             ), | ||||
|         ), | ||||
|     ] | ||||
| @ -3,6 +3,7 @@ | ||||
| from uuid import uuid4 | ||||
|  | ||||
| from django.db import models | ||||
| from django.db.models import Q | ||||
| from django.utils.translation import gettext_lazy as _ | ||||
| from model_utils.managers import InheritanceManager | ||||
| from rest_framework.serializers import BaseSerializer | ||||
| @ -100,6 +101,10 @@ class PolicyBinding(SerializerModel): | ||||
|     ) | ||||
|  | ||||
|     order = models.IntegerField() | ||||
|     honor_order = models.BooleanField( | ||||
|         default=False, | ||||
|         help_text=_("Honor order when evaluating policies."), | ||||
|     ) | ||||
|  | ||||
|     def passes(self, request: PolicyRequest) -> PolicyResult: | ||||
|         """Check if request passes this PolicyBinding, check policy, group or user""" | ||||
| @ -158,6 +163,28 @@ class PolicyBinding(SerializerModel): | ||||
|             models.Index(fields=["user"]), | ||||
|             models.Index(fields=["target"]), | ||||
|         ] | ||||
|         constraints = ( | ||||
|             models.CheckConstraint( | ||||
|                 condition=( | ||||
|                     ( | ||||
|                         Q(policy_id__isnull=False) | ||||
|                         & Q(group_id__isnull=True) | ||||
|                         & Q(user_id__isnull=True) | ||||
|                     ) | ||||
|                     | ( | ||||
|                         Q(group_id__isnull=False) | ||||
|                         & Q(policy_id__isnull=True) | ||||
|                         & Q(user_id__isnull=True) | ||||
|                     ) | ||||
|                     | ( | ||||
|                         Q(user_id__isnull=False) | ||||
|                         & Q(policy_id__isnull=True) | ||||
|                         & Q(group_id__isnull=True) | ||||
|                     ) | ||||
|                 ), | ||||
|                 name="%(app_label)s_%(class)s_only_one_type", | ||||
|             ), | ||||
|         ) | ||||
|  | ||||
|  | ||||
| class Policy(SerializerModel, CreatedUpdatedModel): | ||||
|  | ||||
| @ -5623,6 +5623,11 @@ | ||||
|                     "maximum": 2147483647, | ||||
|                     "title": "Order" | ||||
|                 }, | ||||
|                 "honor_order": { | ||||
|                     "type": "boolean", | ||||
|                     "title": "Honor order", | ||||
|                     "description": "Honor order when evaluating policies." | ||||
|                 }, | ||||
|                 "timeout": { | ||||
|                     "type": "integer", | ||||
|                     "minimum": 0, | ||||
|  | ||||
							
								
								
									
										16
									
								
								schema.yml
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								schema.yml
									
									
									
									
									
								
							| @ -12092,6 +12092,10 @@ paths: | ||||
|         name: enabled | ||||
|         schema: | ||||
|           type: boolean | ||||
|       - in: query | ||||
|         name: honor_order | ||||
|         schema: | ||||
|           type: boolean | ||||
|       - in: query | ||||
|         name: order | ||||
|         schema: | ||||
| @ -53311,6 +53315,9 @@ components: | ||||
|           type: integer | ||||
|           maximum: 2147483647 | ||||
|           minimum: -2147483648 | ||||
|         honor_order: | ||||
|           type: boolean | ||||
|           description: Honor order when evaluating policies. | ||||
|         timeout: | ||||
|           type: integer | ||||
|           maximum: 2147483647 | ||||
| @ -54880,6 +54887,9 @@ components: | ||||
|           type: integer | ||||
|           maximum: 2147483647 | ||||
|           minimum: -2147483648 | ||||
|         honor_order: | ||||
|           type: boolean | ||||
|           description: Honor order when evaluating policies. | ||||
|         timeout: | ||||
|           type: integer | ||||
|           maximum: 2147483647 | ||||
| @ -54922,6 +54932,9 @@ components: | ||||
|           type: integer | ||||
|           maximum: 2147483647 | ||||
|           minimum: -2147483648 | ||||
|         honor_order: | ||||
|           type: boolean | ||||
|           description: Honor order when evaluating policies. | ||||
|         timeout: | ||||
|           type: integer | ||||
|           maximum: 2147483647 | ||||
| @ -59183,6 +59196,9 @@ components: | ||||
|           type: integer | ||||
|           maximum: 2147483647 | ||||
|           minimum: -2147483648 | ||||
|         honor_order: | ||||
|           type: boolean | ||||
|           description: Honor order when evaluating policies. | ||||
|         timeout: | ||||
|           type: integer | ||||
|           maximum: 2147483647 | ||||
|  | ||||
| @ -61,6 +61,7 @@ export class BoundPoliciesList extends Table<PolicyBinding> { | ||||
|             new TableColumn(this.allowedTypesLabel), | ||||
|             new TableColumn(msg("Enabled"), "enabled"), | ||||
|             new TableColumn(msg("Timeout"), "timeout"), | ||||
|             new TableColumn(msg("Honor order"), "honor_order"), | ||||
|             new TableColumn(msg("Actions")), | ||||
|         ]; | ||||
|     } | ||||
| @ -165,6 +166,7 @@ export class BoundPoliciesList extends Table<PolicyBinding> { | ||||
|             html`${this.getPolicyUserGroupRow(item)}`, | ||||
|             html`<ak-status-label type="warning" ?good=${item.enabled}></ak-status-label>`, | ||||
|             html`${item.timeout}`, | ||||
|             html`<ak-status-label type="info" ?good=${item.honorOrder}></ak-status-label>`, | ||||
|             html` ${this.getObjectEditButton(item)} | ||||
|                 <ak-forms-modal size=${PFSize.Medium}> | ||||
|                     <span slot="submit"> ${msg("Update")} </span> | ||||
|  | ||||
| @ -310,6 +310,26 @@ export class PolicyBindingForm extends ModelForm<PolicyBinding, string> { | ||||
|                     required | ||||
|                 /> | ||||
|             </ak-form-element-horizontal> | ||||
|             <ak-form-element-horizontal name="honorOrder"> | ||||
|                 <label class="pf-c-switch"> | ||||
|                     <input | ||||
|                         class="pf-c-switch__input" | ||||
|                         type="checkbox" | ||||
|                         ?checked=${first(this.instance?.honorOrder, false)} | ||||
|                     /> | ||||
|                     <span class="pf-c-switch__toggle"> | ||||
|                         <span class="pf-c-switch__toggle-icon"> | ||||
|                             <i class="fas fa-check" aria-hidden="true"></i> | ||||
|                         </span> | ||||
|                     </span> | ||||
|                     <span class="pf-c-switch__label">${msg("Honor order")}</span> | ||||
|                 </label> | ||||
|                 <p class="pf-c-form__helper-text"> | ||||
|                     ${msg( | ||||
|                         "Honor the order of policies. Use if policies must be evaluated sequentially following the specified order. May impact performance.", | ||||
|                     )} | ||||
|                 </p> | ||||
|             </ak-form-element-horizontal> | ||||
|             <ak-form-element-horizontal label=${msg("Timeout")} ?required=${true} name="timeout"> | ||||
|                 <input | ||||
|                     type="number" | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	