Initial commit
This commit is contained in:
1
env/lib/python3.10/site-packages/django_permissionedforms-0.1.dist-info/INSTALLER
vendored
Normal file
1
env/lib/python3.10/site-packages/django_permissionedforms-0.1.dist-info/INSTALLER
vendored
Normal file
@@ -0,0 +1 @@
|
||||
pip
|
||||
27
env/lib/python3.10/site-packages/django_permissionedforms-0.1.dist-info/LICENSE
vendored
Normal file
27
env/lib/python3.10/site-packages/django_permissionedforms-0.1.dist-info/LICENSE
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
Copyright (c) 2022 Torchbox Ltd and individual contributors.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of Torchbox nor the names of its contributors may be used
|
||||
to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
144
env/lib/python3.10/site-packages/django_permissionedforms-0.1.dist-info/METADATA
vendored
Normal file
144
env/lib/python3.10/site-packages/django_permissionedforms-0.1.dist-info/METADATA
vendored
Normal file
@@ -0,0 +1,144 @@
|
||||
Metadata-Version: 2.1
|
||||
Name: django-permissionedforms
|
||||
Version: 0.1
|
||||
Summary: Django extension for creating forms that vary according to user permissions
|
||||
Home-page: https://github.com/wagtail/django-permissionedforms
|
||||
Author: Matthew Westcott
|
||||
Author-email: matthew.westcott@torchbox.com
|
||||
License: BSD
|
||||
Platform: UNKNOWN
|
||||
Classifier: Development Status :: 4 - Beta
|
||||
Classifier: Environment :: Web Environment
|
||||
Classifier: Intended Audience :: Developers
|
||||
Classifier: License :: OSI Approved :: BSD License
|
||||
Classifier: Operating System :: OS Independent
|
||||
Classifier: Programming Language :: Python
|
||||
Classifier: Programming Language :: Python :: 3
|
||||
Classifier: Programming Language :: Python :: 3.7
|
||||
Classifier: Programming Language :: Python :: 3.8
|
||||
Classifier: Programming Language :: Python :: 3.9
|
||||
Classifier: Programming Language :: Python :: 3.10
|
||||
Classifier: Programming Language :: Python :: 3 :: Only
|
||||
Classifier: Framework :: Django
|
||||
Requires-Python: >=3.7
|
||||
Description-Content-Type: text/markdown
|
||||
Requires-Dist: Django
|
||||
Provides-Extra: testing
|
||||
Requires-Dist: django-modelcluster ; extra == 'testing'
|
||||
|
||||
django-permissionedforms
|
||||
========================
|
||||
|
||||
`django-permissionedforms` is an extension to Django's forms framework, allowing you to define forms where certain fields are shown or omitted according to the user's permissions.
|
||||
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
Run: `pip install django-permissionedforms`
|
||||
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
To add permission rules to a basic Django form, subclass `permissionedforms.PermissionedForm` in place of `django.forms.Form` and add an inner `Meta` class:
|
||||
|
||||
```python
|
||||
from permissionedforms import PermissionedForm
|
||||
|
||||
class PersonForm(PermissionedForm):
|
||||
first_name = forms.CharField()
|
||||
last_name = forms.CharField()
|
||||
|
||||
class Meta:
|
||||
field_permissions = {
|
||||
'last_name': 'myapp.change_last_name'
|
||||
}
|
||||
```
|
||||
|
||||
`field_permissions` is a dict, mapping field names to permission codenames. For each field listed, that field will only be included in the final form if the user has the specified permission, as defined by the `user.has_perm()` method. See Django's documentation on [custom permissions](https://docs.djangoproject.com/en/stable/topics/auth/customizing/#custom-permissions) and [programmatically creating permissions](https://docs.djangoproject.com/en/4.0/topics/auth/default/#programmatically-creating-permissions) for details on how to set permissions up; alternatively, if you want to set a field as only available to superusers, you can use any arbitrary string (such as `'superuser'`) as the codename, since `has_perm` always returns True for them.
|
||||
|
||||
Then, when instantiating the form, pass the keyword argument `for_user`:
|
||||
|
||||
```python
|
||||
form = PersonForm(for_user=request.user)
|
||||
```
|
||||
|
||||
This will result in a form where the `last_name` field is only present if the logged-in user has the `change_last_name` permission.
|
||||
|
||||
The keyword argument `for_user` is optional, and if not passed, the form will behave as an ordinary form with all named fields available.
|
||||
|
||||
For a ModelForm, the procedure is the same, except that you should inherit from `permissionedforms.PermissionedModelForm` instead. `field_permissions` is added alongside the existing `Meta` options:
|
||||
|
||||
```python
|
||||
from permissionedforms import PermissionedModelForm
|
||||
|
||||
class CountryForm(PermissionedModelForm):
|
||||
class Meta:
|
||||
model = Country
|
||||
fields = ['name', 'description']
|
||||
field_permissions = {
|
||||
'description': 'tests.change_country_description'
|
||||
}
|
||||
|
||||
form = CountryForm(instance=country, for_user=request.user)
|
||||
```
|
||||
|
||||
|
||||
Integrating with other base form classes
|
||||
----------------------------------------
|
||||
|
||||
You may wish to integrate the permission handling from `django-permissionedforms` into some other base form class, such as `ClusterForm` from the [django-modelcluster](https://github.com/wagtail/django-modelcluster) package. If that base form class is a straightforward subclass of `django.forms.Form` or `django.forms.ModelForm`, then using multiple inheritance to additionally inherit from `PermissionedForm` or `PermissionedModelForm` should work:
|
||||
|
||||
```python
|
||||
from fancyforms import FancyForm # made up for example purposes
|
||||
from permissionedforms import PermissionedForm
|
||||
|
||||
class FancyPermissionedForm(PermissionedForm, FancyForm):
|
||||
pass
|
||||
```
|
||||
|
||||
However, this will fail if the base form class implements its own metaclass. In this case, you will need to define a new metaclass inheriting from both the existing one and `permissionedforms.PermissionedFormMetaclass`:
|
||||
|
||||
```python
|
||||
from fancyforms import FancyForm
|
||||
from permissionedforms import PermissionedForm, PermissionedFormMetaclass
|
||||
|
||||
|
||||
FancyFormMetaclass = type(FancyForm)
|
||||
|
||||
|
||||
class FancyPermissionedFormMetaclass(PermissionedFormMetaclass, FancyFormMetaclass):
|
||||
pass
|
||||
|
||||
|
||||
class FancyPermissionedForm(PermissionedForm, FancyForm, metaclass=FancyPermissionedFormMetaclass):
|
||||
pass
|
||||
```
|
||||
|
||||
This could still fail if the base form class incorporates a custom Options class to allow it to accept its own `class Meta` options. If so, it will be necessary to define a new Options class, again using multiple inheritance to subclass both the existing Options class and `permissionedforms.PermissionedFormOptionsMixin`, and then set this as `options_class` on the metaclass. The following recipe will work for `ClusterForm`:
|
||||
|
||||
```python
|
||||
from modelcluster.forms import ClusterForm, ClusterFormMetaclass, ClusterFormOptions
|
||||
from permissionedforms import PermissionedForm, PermissionedFormMetaclass, PermissionedFormOptionsMixin
|
||||
|
||||
|
||||
class PermissionedClusterFormOptions(PermissionedFormOptionsMixin, ClusterFormOptions):
|
||||
pass
|
||||
|
||||
|
||||
class PermissionedClusterFormMetaclass(PermissionedFormMetaclass, ClusterFormMetaclass):
|
||||
options_class = PermissionedClusterFormOptions
|
||||
|
||||
|
||||
class PermissionedClusterForm(PermissionedForm, ClusterForm, metaclass=PermissionedClusterFormMetaclass):
|
||||
pass
|
||||
```
|
||||
|
||||
|
||||
Acknowledgements
|
||||
----------------
|
||||
|
||||
`django-permissionedforms` was developed as part of [Wagtail](https://wagtail.org/)'s next-generation page editor, sponsored by Google.
|
||||
|
||||
|
||||
10
env/lib/python3.10/site-packages/django_permissionedforms-0.1.dist-info/RECORD
vendored
Normal file
10
env/lib/python3.10/site-packages/django_permissionedforms-0.1.dist-info/RECORD
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
django_permissionedforms-0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||
django_permissionedforms-0.1.dist-info/LICENSE,sha256=HI_ZbeFvvgL8EGSnTbDjzwMpZs4FTmeeB7qjXtxf5xs,1545
|
||||
django_permissionedforms-0.1.dist-info/METADATA,sha256=_fMKE2zB8oSGF4syph20kc2brN1c105_-gKRD8Rkg3Y,6035
|
||||
django_permissionedforms-0.1.dist-info/RECORD,,
|
||||
django_permissionedforms-0.1.dist-info/WHEEL,sha256=Z-nyYpwrcSqxfdux5Mbn_DQ525iP7J2DG3JgGvOYyTQ,110
|
||||
django_permissionedforms-0.1.dist-info/top_level.txt,sha256=_P5kpBeRwV5Fzxl5chstsCE1MO0XqhUBHTrC777woP0,18
|
||||
permissionedforms/__init__.py,sha256=l70EYlViKrd_6xhB8TzyzDI71T_kIJJL9xK1kwV0Oss,29
|
||||
permissionedforms/__pycache__/__init__.cpython-310.pyc,,
|
||||
permissionedforms/__pycache__/forms.cpython-310.pyc,,
|
||||
permissionedforms/forms.py,sha256=XEtrDgvXDH3BqxTV_tnvdgqKWteAFiXN_XvqeHoJkgU,3978
|
||||
6
env/lib/python3.10/site-packages/django_permissionedforms-0.1.dist-info/WHEEL
vendored
Normal file
6
env/lib/python3.10/site-packages/django_permissionedforms-0.1.dist-info/WHEEL
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
Wheel-Version: 1.0
|
||||
Generator: bdist_wheel (0.36.2)
|
||||
Root-Is-Purelib: true
|
||||
Tag: py2-none-any
|
||||
Tag: py3-none-any
|
||||
|
||||
1
env/lib/python3.10/site-packages/django_permissionedforms-0.1.dist-info/top_level.txt
vendored
Normal file
1
env/lib/python3.10/site-packages/django_permissionedforms-0.1.dist-info/top_level.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
permissionedforms
|
||||
Reference in New Issue
Block a user