Add Group Member policy
This commit is contained in:
parent
364f040b36
commit
e4baf8c21e
|
@ -4,7 +4,8 @@ from django import forms
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
from passbook.core.models import (DebugPolicy, FieldMatcherPolicy,
|
from passbook.core.models import (DebugPolicy, FieldMatcherPolicy,
|
||||||
PasswordPolicy, WebhookPolicy)
|
GroupMembershipPolicy, PasswordPolicy,
|
||||||
|
WebhookPolicy)
|
||||||
|
|
||||||
GENERAL_FIELDS = ['name', 'action', 'negate', 'order', ]
|
GENERAL_FIELDS = ['name', 'action', 'negate', 'order', ]
|
||||||
|
|
||||||
|
@ -53,6 +54,17 @@ class DebugPolicyForm(forms.ModelForm):
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class GroupMembershipPolicyForm(forms.ModelForm):
|
||||||
|
"""GroupMembershipPolicy Form"""
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
|
||||||
|
model = GroupMembershipPolicy
|
||||||
|
fields = GENERAL_FIELDS + ['group', ]
|
||||||
|
widgets = {
|
||||||
|
'name': forms.TextInput(),
|
||||||
|
}
|
||||||
|
|
||||||
class PasswordPolicyForm(forms.ModelForm):
|
class PasswordPolicyForm(forms.ModelForm):
|
||||||
"""PasswordPolicy Form"""
|
"""PasswordPolicy Form"""
|
||||||
|
|
||||||
|
|
26
passbook/core/migrations/0020_groupmembershippolicy.py
Normal file
26
passbook/core/migrations/0020_groupmembershippolicy.py
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
# Generated by Django 2.1.7 on 2019-03-10 18:25
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('passbook_core', '0019_auto_20190310_1615'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='GroupMembershipPolicy',
|
||||||
|
fields=[
|
||||||
|
('policy_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='passbook_core.Policy')),
|
||||||
|
('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='passbook_core.Group')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Group Membership Policy',
|
||||||
|
'verbose_name_plural': 'Group Membership Policies',
|
||||||
|
},
|
||||||
|
bases=('passbook_core.policy',),
|
||||||
|
),
|
||||||
|
]
|
|
@ -393,6 +393,21 @@ class DebugPolicy(Policy):
|
||||||
verbose_name = _('Debug Policy')
|
verbose_name = _('Debug Policy')
|
||||||
verbose_name_plural = _('Debug Policies')
|
verbose_name_plural = _('Debug Policies')
|
||||||
|
|
||||||
|
class GroupMembershipPolicy(Policy):
|
||||||
|
"""Policy to check if the user is member in a certain group"""
|
||||||
|
|
||||||
|
group = models.ForeignKey('Group', on_delete=models.CASCADE)
|
||||||
|
|
||||||
|
form = 'passbook.core.forms.policies.GroupMembershipPolicyForm'
|
||||||
|
|
||||||
|
def passes(self, user: User) -> Union[bool, Tuple[bool, str]]:
|
||||||
|
return self.group.user_set.filter(pk=user.pk).exists()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
|
||||||
|
verbose_name = _('Group Membership Policy')
|
||||||
|
verbose_name_plural = _('Group Membership Policies')
|
||||||
|
|
||||||
class Invitation(UUIDModel):
|
class Invitation(UUIDModel):
|
||||||
"""Single-use invitation link"""
|
"""Single-use invitation link"""
|
||||||
|
|
||||||
|
|
Reference in a new issue