django-item-owner-model
Data item has owner and can be shared to other users. Login user can only see owned or shared data items. User with permit_all permission can see all data items.
Install
pip install django-item-owner-model
Installed utils
- django_item_owner_model.models.DjangoItemManager
- django_item_owner_model.models.DjangoItemOwnerModel
- extra permissions:
("django_item_owner_model_permit_all", _("Permit All")),
- extra permissions:
- django_item_owner_model.models.DjangoItemShareModel
- extra permissions:
("django_item_share_model_permit_all", _("Permit All")),
- extra permissions:
Note:
- DjangoItemOwnerModel and DjangoItemShareModel use the same custom manager: DjangoItemManager.
Usage
pro/settings.py
INSTALLED_APPS = [
....
"django_middleware_global_request",
"django_item_owner_model",
...
]
MIDDLEWARE = [
...
"django_middleware_global_request.middleware.GlobalRequestMiddleware",
...
]
- We requires
requestinstance in Model's Manager, so we have to use django_middleware_global_request to get request instance. See detail aboutdjango_middleware_global_requestat https://pypi.org/project/django-middleware-global-request/.
app/models.py
from django.db import models
from django_item_owner_model.models import DjangoAdminItemOwnerModel
from django_item_owner_model.models import DjangoAdminItemShareModel
class Category(DjangoAdminItemOwnerModel, models.Model):
title = models.CharField(max_length=32)
def __str__(self):
return self.title
class Book(DjangoAdminItemOwnerModel, DjangoAdminItemShareModel, models.Model):
category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, blank=True, related_name="books")
title = models.CharField(max_length=32)
def __str__(self):
return self.title
app/admin.py
from django.contrib import admin
from django import forms
from .models import Category
from .models import Book
class BookInline(admin.TabularInline):
model = Book
class CategoryAdmin(admin.ModelAdmin):
allow_super_user_see_all_items = True
list_display = ["title"]
inlines = [
BookInline,
]
class BookAdmin(admin.ModelAdmin):
list_display = ["title", "owner", "share_users_display"]
def share_users_display(self, obj):
users = [str(x) for x in obj.share_users.all()]
return ",".join(users)
admin.site.register(Category, CategoryAdmin)
admin.site.register(Book, BookAdmin)
Bug report
Please report any issues at https://github.com/zencore-cn/zencore-issues.
Releases
v0.3.1 2020-09-07
- Doc fix.
- Add i18n.
- Rename django_item_owner_model.models.DjangoItemManager to django_item_owner_model.models.DjangoItemOwnerManager.
v0.3.0 2020-06-22
- Change app's name from
django-admin-item-ownertodjango-item-owner-model. - Use custom model Manager to control item access.
- Note:
New version changes a lot.
v0.2.0 2020-01-08
- Add ItemShareMixin for models and admins.
v0.1.0 2019-12-01
- First release.
Metadata
Release files for django-item-owner-model 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| django-item-owner-model-0.3.1.tar.gz | 5.3 kB | Without provenance | Details for django-item-owner-model-0.3.1.tar.gz |
Release files / django-item-owner-model-0.3.1.tar.gz
| Download URL | django-item-owner-model-0.3.1.tar.gz |
|---|---|
| Size | 5.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b73a5c804449ffba16ebe9bf27e833dc81f8826334551678673fa7de3bd2d95c
|
|
BLAKE2b-256 checksum How to use checksums |
dbde14153327cdaf39a831c3c35adef4988cb2228caa10ca37885f5cda1cc7dd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.7
|
Security for django-item-owner-model 0.3.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.