mirror of
https://github.com/ae-utbm/sith.git
synced 2024-11-22 06:03:20 +00:00
update doc
This commit is contained in:
parent
0c566cfbde
commit
c03a1b57c5
@ -1,6 +1,5 @@
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from ninja import Form
|
|
||||||
from ninja_extra import ControllerBase, api_controller, route
|
from ninja_extra import ControllerBase, api_controller, route
|
||||||
from ninja_extra.exceptions import PermissionDenied
|
from ninja_extra.exceptions import PermissionDenied
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ Some permissions are global (like `IsInGroup` or `IsRoot`),
|
|||||||
and some others are per-object (like `CanView` or `CanEdit`).
|
and some others are per-object (like `CanView` or `CanEdit`).
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
```python
|
|
||||||
# restrict all the routes of this controller
|
# restrict all the routes of this controller
|
||||||
# to subscribed users
|
# to subscribed users
|
||||||
@api_controller("/foo", permissions=[IsSubscriber])
|
@api_controller("/foo", permissions=[IsSubscriber])
|
||||||
@ -44,6 +44,8 @@ from ninja_extra.permissions import BasePermission
|
|||||||
|
|
||||||
|
|
||||||
class IsInGroup(BasePermission):
|
class IsInGroup(BasePermission):
|
||||||
|
"""Check that the user is in the group whose primary key is given."""
|
||||||
|
|
||||||
def __init__(self, group_pk: int):
|
def __init__(self, group_pk: int):
|
||||||
self._group_pk = group_pk
|
self._group_pk = group_pk
|
||||||
|
|
||||||
@ -52,21 +54,33 @@ class IsInGroup(BasePermission):
|
|||||||
|
|
||||||
|
|
||||||
class IsRoot(BasePermission):
|
class IsRoot(BasePermission):
|
||||||
|
"""Check that the user is root."""
|
||||||
|
|
||||||
def has_permission(self, request: HttpRequest, controller: ControllerBase) -> bool:
|
def has_permission(self, request: HttpRequest, controller: ControllerBase) -> bool:
|
||||||
return request.user.is_root
|
return request.user.is_root
|
||||||
|
|
||||||
|
|
||||||
class IsSubscriber(BasePermission):
|
class IsSubscriber(BasePermission):
|
||||||
|
"""Check that the user is currently subscribed."""
|
||||||
|
|
||||||
def has_permission(self, request: HttpRequest, controller: ControllerBase) -> bool:
|
def has_permission(self, request: HttpRequest, controller: ControllerBase) -> bool:
|
||||||
return request.user.is_subscribed
|
return request.user.is_subscribed
|
||||||
|
|
||||||
|
|
||||||
class IsOldSubscriber(BasePermission):
|
class IsOldSubscriber(BasePermission):
|
||||||
|
"""Check that the user has at least one subscription in its history."""
|
||||||
|
|
||||||
def has_permission(self, request: HttpRequest, controller: ControllerBase) -> bool:
|
def has_permission(self, request: HttpRequest, controller: ControllerBase) -> bool:
|
||||||
return request.user.was_subscribed
|
return request.user.was_subscribed
|
||||||
|
|
||||||
|
|
||||||
class CanView(BasePermission):
|
class CanView(BasePermission):
|
||||||
|
"""Check that this user has the permission to view the object of this route.
|
||||||
|
|
||||||
|
Wrap the `user.can_view(obj)` method.
|
||||||
|
To see an example, look at the exemple in the module docstring.
|
||||||
|
"""
|
||||||
|
|
||||||
def has_permission(self, request: HttpRequest, controller: ControllerBase) -> bool:
|
def has_permission(self, request: HttpRequest, controller: ControllerBase) -> bool:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -77,6 +91,12 @@ class CanView(BasePermission):
|
|||||||
|
|
||||||
|
|
||||||
class CanEdit(BasePermission):
|
class CanEdit(BasePermission):
|
||||||
|
"""Check that this user has the permission to edit the object of this route.
|
||||||
|
|
||||||
|
Wrap the `user.can_edit(obj)` method.
|
||||||
|
To see an example, look at the exemple in the module docstring.
|
||||||
|
"""
|
||||||
|
|
||||||
def has_permission(self, request: HttpRequest, controller: ControllerBase) -> bool:
|
def has_permission(self, request: HttpRequest, controller: ControllerBase) -> bool:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -87,6 +107,12 @@ class CanEdit(BasePermission):
|
|||||||
|
|
||||||
|
|
||||||
class IsOwner(BasePermission):
|
class IsOwner(BasePermission):
|
||||||
|
"""Check that this user owns the object of this route.
|
||||||
|
|
||||||
|
Wrap the `user.is_owner(obj)` method.
|
||||||
|
To see an example, look at the exemple in the module docstring.
|
||||||
|
"""
|
||||||
|
|
||||||
def has_permission(self, request: HttpRequest, controller: ControllerBase) -> bool:
|
def has_permission(self, request: HttpRequest, controller: ControllerBase) -> bool:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
1
docs/reference/core/api_permissions.md
Normal file
1
docs/reference/core/api_permissions.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
::: core.api_permissions
|
1
docs/reference/core/schemas.md
Normal file
1
docs/reference/core/schemas.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
::: core.schemas
|
1
docs/reference/counter/schemas.md
Normal file
1
docs/reference/counter/schemas.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
::: counter.schemas
|
1
docs/reference/pedagogy/schemas.md
Normal file
1
docs/reference/pedagogy/schemas.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
::: pedagogy.schemas
|
1
docs/reference/sas/schemas.md
Normal file
1
docs/reference/sas/schemas.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
::: sas.schemas
|
@ -170,7 +170,14 @@ python manage.py runserver
|
|||||||
!!!note
|
!!!note
|
||||||
|
|
||||||
Le serveur est alors accessible à l'adresse
|
Le serveur est alors accessible à l'adresse
|
||||||
[http://localhost:8000](http://localhost:8000) ou bien [http://127.0.0.1:8000/](http://127.0.0.1:8000/).
|
[http://localhost:8000](http://localhost:8000)
|
||||||
|
ou bien [http://127.0.0.1:8000/](http://127.0.0.1:8000/).
|
||||||
|
|
||||||
|
!!!tip
|
||||||
|
|
||||||
|
Vous trouverez également, à l'adresse
|
||||||
|
[http://localhost:8000/api/docs](http://localhost:8000/api/docs),
|
||||||
|
une interface swagger, avec toutes les routes de l'API.
|
||||||
|
|
||||||
## Générer la documentation
|
## Générer la documentation
|
||||||
|
|
||||||
|
@ -197,3 +197,22 @@ Les mixins suivants sont implémentés :
|
|||||||
Mais sur les `ListView`, on peut arriver à des temps
|
Mais sur les `ListView`, on peut arriver à des temps
|
||||||
de réponse extrêmement élevés.
|
de réponse extrêmement élevés.
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
L'API utilise son propre système de permissions.
|
||||||
|
Ce n'est pas encore un autre système en parallèle, mais un wrapper
|
||||||
|
autour de notre système de permissions, afin de l'adapter aux besoins
|
||||||
|
de l'API.
|
||||||
|
|
||||||
|
En effet, l'interface attendue pour manipuler le plus aisément
|
||||||
|
possible les permissions des routes d'API avec la librairie que nous
|
||||||
|
utilisons est différente de notre système, tout en restant adaptable.
|
||||||
|
(Pour plus de détail,
|
||||||
|
[voir la doc de la lib](https://eadwincode.github.io/django-ninja-extra/api_controller/api_controller_permission/)).
|
||||||
|
|
||||||
|
Si vous avez bien suivi ce qui a été dit plus haut,
|
||||||
|
vous ne devriez pas être perdu, étant donné
|
||||||
|
que le système de permissions de l'API utilise
|
||||||
|
des noms assez similaires : `IsInGroup`, `IsRoot`, `IsSubscriber`...
|
||||||
|
Vous pouvez trouver des exemples d'utilisation de ce système
|
||||||
|
dans [cette partie](../reference/core/api_permissions.md).
|
||||||
|
@ -26,57 +26,55 @@ sith3/
|
|||||||
│ └── workflows/ (2)
|
│ └── workflows/ (2)
|
||||||
├── accounting/ (3)
|
├── accounting/ (3)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── api/ (4)
|
├── club/ (4)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── club/ (5)
|
├── com/ (5)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── com/ (6)
|
├── core/ (6)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── core/ (7)
|
├── counter/ (7)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── counter/ (8)
|
├── docs/ (8)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── docs/ (9)
|
├── eboutic/ (9)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── eboutic/ (10)
|
├── election/ (10)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── election/ (11)
|
├── forum/ (11)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── forum/ (12)
|
├── galaxy/ (12)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── galaxy/ (13)
|
├── launderette/ (13)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── launderette/ (14)
|
├── locale/ (14)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── locale/ (15)
|
├── matmat/ (15)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── matmat/ (16)
|
├── pedagogy/ (16)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── pedagogy/ (17)
|
├── rootplace/ (17)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── rootplace/ (18)
|
├── sas/ (18)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── sas/ (19)
|
├── sith/ (19)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── sith/ (20)
|
├── stock/ (20)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── stock/ (21)
|
├── subscription/ (21)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── subscription/ (22)
|
├── trombi/ (22)
|
||||||
│ └── ...
|
|
||||||
├── trombi/ (23)
|
|
||||||
│ └── ...
|
│ └── ...
|
||||||
│
|
│
|
||||||
├── .coveragerc (24)
|
├── .coveragerc (23)
|
||||||
├── .envrc (25)
|
├── .envrc (24)
|
||||||
├── .gitattributes
|
├── .gitattributes
|
||||||
├── .gitignore
|
├── .gitignore
|
||||||
├── .mailmap
|
├── .mailmap
|
||||||
├── .env.exemple
|
├── .env.exemple
|
||||||
├── manage.py (26)
|
├── manage.py (25)
|
||||||
├── mkdocs.yml (27)
|
├── mkdocs.yml (26)
|
||||||
├── poetry.lock
|
├── poetry.lock
|
||||||
├── pyproject.toml (28)
|
├── pyproject.toml (27)
|
||||||
└── README.md
|
└── README.md
|
||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
@ -90,40 +88,39 @@ sith3/
|
|||||||
Par exemple, le workflow `docs.yml` compile
|
Par exemple, le workflow `docs.yml` compile
|
||||||
et publie la documentation à chaque push sur la branche `master`.
|
et publie la documentation à chaque push sur la branche `master`.
|
||||||
3. Application de gestion de la comptabilité.
|
3. Application de gestion de la comptabilité.
|
||||||
4. Application contenant des routes d'API.
|
4. Application de gestion des clubs et de leurs membres.
|
||||||
5. Application de gestion des clubs et de leurs membres.
|
5. Application contenant les fonctionnalités
|
||||||
6. Application contenant les fonctionnalités
|
|
||||||
destinées aux responsables communication de l'AE.
|
destinées aux responsables communication de l'AE.
|
||||||
7. Application contenant la modélisation centrale du site.
|
6. Application contenant la modélisation centrale du site.
|
||||||
On en reparle plus loin sur cette page.
|
On en reparle plus loin sur cette page.
|
||||||
8. Application de gestion des comptoirs, des permanences
|
7. Application de gestion des comptoirs, des permanences
|
||||||
sur ces comptoirs et des transactions qui y sont effectuées.
|
sur ces comptoirs et des transactions qui y sont effectuées.
|
||||||
9. Dossier contenant la documentation.
|
8. Dossier contenant la documentation.
|
||||||
10. Application de gestion de la boutique en ligne.
|
9. Application de gestion de la boutique en ligne.
|
||||||
11. Application de gestion des élections.
|
10. Application de gestion des élections.
|
||||||
12. Application de gestion du forum
|
11. Application de gestion du forum
|
||||||
13. Application de gestion de la galaxie ; la galaxie
|
12. Application de gestion de la galaxie ; la galaxie
|
||||||
est un graphe des niveaux de proximité entre les différents
|
est un graphe des niveaux de proximité entre les différents
|
||||||
étudiants.
|
étudiants.
|
||||||
14. Gestion des machines à laver de l'AE
|
13. Gestion des machines à laver de l'AE
|
||||||
15. Dossier contenant les fichiers de traduction.
|
14. Dossier contenant les fichiers de traduction.
|
||||||
16. Fonctionnalités de recherche d'utilisateurs.
|
15. Fonctionnalités de recherche d'utilisateurs.
|
||||||
17. Le guide des UEs du site, sur lequel les utilisateurs
|
16. Le guide des UEs du site, sur lequel les utilisateurs
|
||||||
peuvent également laisser leurs avis.
|
peuvent également laisser leurs avis.
|
||||||
18. Fonctionnalités utiles aux utilisateurs root.
|
17. Fonctionnalités utiles aux utilisateurs root.
|
||||||
19. Le SAS, où l'on trouve toutes les photos de l'AE.
|
18. Le SAS, où l'on trouve toutes les photos de l'AE.
|
||||||
20. Application principale du projet, contenant sa configuration.
|
19. Application principale du projet, contenant sa configuration.
|
||||||
21. Gestion des stocks des comptoirs.
|
20. Gestion des stocks des comptoirs.
|
||||||
22. Gestion des cotisations des utilisateurs du site.
|
21. Gestion des cotisations des utilisateurs du site.
|
||||||
23. Gestion des trombinoscopes.
|
22. Gestion des trombinoscopes.
|
||||||
24. Fichier de configuration de coverage.
|
23. Fichier de configuration de coverage.
|
||||||
25. Fichier de configuration de direnv.
|
24. Fichier de configuration de direnv.
|
||||||
26. Fichier généré automatiquement par Django. C'est lui
|
25. Fichier généré automatiquement par Django. C'est lui
|
||||||
qui permet d'appeler des commandes de gestion du projet
|
qui permet d'appeler des commandes de gestion du projet
|
||||||
avec la syntaxe `python ./manage.py <nom de la commande>`
|
avec la syntaxe `python ./manage.py <nom de la commande>`
|
||||||
27. Le fichier de configuration de la documentation,
|
26. Le fichier de configuration de la documentation,
|
||||||
avec ses plugins et sa table des matières.
|
avec ses plugins et sa table des matières.
|
||||||
28. Le fichier où sont déclarés les dépendances et la configuration
|
27. Le fichier où sont déclarés les dépendances et la configuration
|
||||||
de certaines d'entre elles.
|
de certaines d'entre elles.
|
||||||
|
|
||||||
|
|
||||||
@ -175,11 +172,13 @@ comme suit :
|
|||||||
│ └── ...
|
│ └── ...
|
||||||
├── templates/ (2)
|
├── templates/ (2)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── admin.py (3)
|
├── api.py (3)
|
||||||
├── models.py (4)
|
├── admin.py (4)
|
||||||
├── tests.py (5)
|
├── models.py (5)
|
||||||
├── urls.py (6)
|
├── tests.py (6)
|
||||||
└── views.py (7)
|
├── schemas.py (7)
|
||||||
|
├── urls.py (8)
|
||||||
|
└── views.py (9)
|
||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -188,15 +187,17 @@ comme suit :
|
|||||||
de mettre à jour la base de données.
|
de mettre à jour la base de données.
|
||||||
cf. [Gestion des migrations](../howto/migrations.md)
|
cf. [Gestion des migrations](../howto/migrations.md)
|
||||||
2. Dossier contenant les templates jinja utilisés par cette application.
|
2. Dossier contenant les templates jinja utilisés par cette application.
|
||||||
3. Fichier de configuration de l'interface d'administration.
|
3. Fichier contenant les routes d'API liées à cette application
|
||||||
|
4. Fichier de configuration de l'interface d'administration.
|
||||||
Ce fichier permet de déclarer les modèles de l'application
|
Ce fichier permet de déclarer les modèles de l'application
|
||||||
dans l'interface d'administration.
|
dans l'interface d'administration.
|
||||||
4. Fichier contenant les modèles de l'application.
|
5. Fichier contenant les modèles de l'application.
|
||||||
Les modèles sont des classes Python qui représentent
|
Les modèles sont des classes Python qui représentent
|
||||||
les tables de la base de données.
|
les tables de la base de données.
|
||||||
5. Fichier contenant les tests de l'application.
|
6. Fichier contenant les tests de l'application.
|
||||||
6. Configuration des urls de l'application.
|
7. Schémas de validation de données utilisés principalement dans l'API.
|
||||||
7. Fichier contenant les vues de l'application.
|
8. Configuration des urls de l'application.
|
||||||
|
9. Fichier contenant les vues de l'application.
|
||||||
Dans les plus grosses applications,
|
Dans les plus grosses applications,
|
||||||
ce fichier peut être remplacé par un package
|
ce fichier peut être remplacé par un package
|
||||||
`views` dans lequel les vues sont réparties entre
|
`views` dans lequel les vues sont réparties entre
|
||||||
|
@ -89,9 +89,12 @@ nav:
|
|||||||
- core:
|
- core:
|
||||||
- reference/core/models.md
|
- reference/core/models.md
|
||||||
- reference/core/views.md
|
- reference/core/views.md
|
||||||
|
- reference/core/schemas.md
|
||||||
|
- reference/core/api_permissions.md
|
||||||
- counter:
|
- counter:
|
||||||
- reference/counter/models.md
|
- reference/counter/models.md
|
||||||
- reference/counter/views.md
|
- reference/counter/views.md
|
||||||
|
- reference/counter/schemas.md
|
||||||
- eboutic:
|
- eboutic:
|
||||||
- reference/eboutic/models.md
|
- reference/eboutic/models.md
|
||||||
- reference/eboutic/views.md
|
- reference/eboutic/views.md
|
||||||
@ -113,12 +116,14 @@ nav:
|
|||||||
- pedagogy:
|
- pedagogy:
|
||||||
- reference/pedagogy/models.md
|
- reference/pedagogy/models.md
|
||||||
- reference/pedagogy/views.md
|
- reference/pedagogy/views.md
|
||||||
|
- reference/pedagogy/schemas.md
|
||||||
- rootplace:
|
- rootplace:
|
||||||
- reference/rootplace/models.md
|
- reference/rootplace/models.md
|
||||||
- reference/rootplace/views.md
|
- reference/rootplace/views.md
|
||||||
- sas:
|
- sas:
|
||||||
- reference/sas/models.md
|
- reference/sas/models.md
|
||||||
- reference/sas/views.md
|
- reference/sas/views.md
|
||||||
|
- reference/sas/schemas.md
|
||||||
- stock:
|
- stock:
|
||||||
- reference/stock/models.md
|
- reference/stock/models.md
|
||||||
- reference/stock/views.md
|
- reference/stock/views.md
|
||||||
|
Loading…
Reference in New Issue
Block a user