Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
D
djangoldp
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
djangoldp-packages
djangoldp
Commits
1c76dfa2
Commit
1c76dfa2
authored
6 years ago
by
Jean-Baptiste
Browse files
Options
Downloads
Patches
Plain Diff
update: nested fields should use the nested model permissions
parent
d2ef845a
No related branches found
No related tags found
No related merge requests found
Pipeline
#833
passed
6 years ago
Changes
3
Pipelines
2
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
djangoldp/models.py
+8
-0
8 additions, 0 deletions
djangoldp/models.py
djangoldp/permissions.py
+8
-3
8 additions, 3 deletions
djangoldp/permissions.py
djangoldp/views.py
+3
-2
3 additions, 2 deletions
djangoldp/views.py
with
19 additions
and
5 deletions
djangoldp/models.py
+
8
−
0
View file @
1c76dfa2
...
@@ -86,6 +86,14 @@ class Model(models.Model):
...
@@ -86,6 +86,14 @@ class Model(models.Model):
path
=
"
{}/
"
.
format
(
path
)
path
=
"
{}/
"
.
format
(
path
)
return
path
return
path
@classmethod
def
get_permission_classes
(
cls
,
related_model
,
default_permissions_classes
):
try
:
return
getattr
(
related_model
.
_meta
,
'
permission_classes
'
,
getattr
(
related_model
.
Meta
,
'
permission_classes
'
,
default_permissions_classes
))
except
AttributeError
:
return
default_permissions_classes
class
LDPSource
(
models
.
Model
):
class
LDPSource
(
models
.
Model
):
container
=
models
.
URLField
()
container
=
models
.
URLField
()
...
...
This diff is collapsed.
Click to expand it.
djangoldp/permissions.py
+
8
−
3
View file @
1c76dfa2
from
rest_framework
import
permissions
from
rest_framework
import
filters
from
guardian.shortcuts
import
get_objects_for_user
from
guardian.shortcuts
import
get_objects_for_user
from
rest_framework
import
filters
from
rest_framework
import
permissions
"""
"""
Liste des actions passées dans views selon le protocole REST :
Liste des actions passées dans views selon le protocole REST :
...
@@ -16,6 +16,7 @@ Pour chacune de ces actions, on va définir si on accepte la requête (True) ou
...
@@ -16,6 +16,7 @@ Pour chacune de ces actions, on va définir si on accepte la requête (True) ou
checks have already passed
checks have already passed
"""
"""
class
WACPermissions
(
permissions
.
DjangoObjectPermissions
):
class
WACPermissions
(
permissions
.
DjangoObjectPermissions
):
perms_map
=
{
perms_map
=
{
'
GET
'
:
[
'
%(app_label)s.view_%(model_name)s
'
],
'
GET
'
:
[
'
%(app_label)s.view_%(model_name)s
'
],
...
@@ -43,9 +44,11 @@ class ObjectFilter(filters.BaseFilterBackend):
...
@@ -43,9 +44,11 @@ class ObjectFilter(filters.BaseFilterBackend):
objects
=
get_objects_for_user
(
request
.
user
,
perm
,
klass
=
queryset
)
objects
=
get_objects_for_user
(
request
.
user
,
perm
,
klass
=
queryset
)
return
objects
return
objects
class
ObjectPermission
(
WACPermissions
):
class
ObjectPermission
(
WACPermissions
):
filter_class
=
ObjectFilter
filter_class
=
ObjectFilter
class
InboxPermissions
(
WACPermissions
):
class
InboxPermissions
(
WACPermissions
):
"""
"""
Anonymous users: can create notifications but can
'
t read
Anonymous users: can create notifications but can
'
t read
...
@@ -53,6 +56,7 @@ class InboxPermissions(WACPermissions):
...
@@ -53,6 +56,7 @@ class InboxPermissions(WACPermissions):
Inbox owners: can read + update all notifications
Inbox owners: can read + update all notifications
"""
"""
filter_class
=
ObjectFilter
filter_class
=
ObjectFilter
def
has_permission
(
self
,
request
,
view
):
def
has_permission
(
self
,
request
,
view
):
if
view
.
action
in
[
'
create
'
,
'
retrieve
'
,
'
update
'
,
'
partial_update
'
,
'
destroy
'
]:
if
view
.
action
in
[
'
create
'
,
'
retrieve
'
,
'
update
'
,
'
partial_update
'
,
'
destroy
'
]:
return
True
return
True
...
@@ -67,6 +71,7 @@ class InboxPermissions(WACPermissions):
...
@@ -67,6 +71,7 @@ class InboxPermissions(WACPermissions):
return
True
return
True
return
super
().
has_object_permission
(
request
,
view
)
return
super
().
has_object_permission
(
request
,
view
)
class
AnonymousReadOnly
(
WACPermissions
):
class
AnonymousReadOnly
(
WACPermissions
):
"""
"""
Anonymous users: can read all posts
Anonymous users: can read all posts
...
@@ -97,4 +102,4 @@ class AnonymousReadOnly(WACPermissions):
...
@@ -97,4 +102,4 @@ class AnonymousReadOnly(WACPermissions):
if
author
==
request
.
user
:
if
author
==
request
.
user
:
return
True
return
True
else
:
else
:
return
super
().
has_object_permission
(
request
,
view
,
obj
)
return
super
().
has_object_permission
(
request
,
view
,
obj
)
\ No newline at end of file
This diff is collapsed.
Click to expand it.
djangoldp/views.py
+
3
−
2
View file @
1c76dfa2
...
@@ -6,7 +6,6 @@ from django.core.urlresolvers import get_resolver
...
@@ -6,7 +6,6 @@ from django.core.urlresolvers import get_resolver
from
django.db.utils
import
OperationalError
from
django.db.utils
import
OperationalError
from
django.shortcuts
import
get_object_or_404
from
django.shortcuts
import
get_object_or_404
from
django.utils.decorators
import
classonlymethod
from
django.utils.decorators
import
classonlymethod
from
djangoldp.models
import
LDPSource
from
guardian.shortcuts
import
get_objects_for_user
from
guardian.shortcuts
import
get_objects_for_user
from
pyld
import
jsonld
from
pyld
import
jsonld
from
rest_framework.authentication
import
SessionAuthentication
from
rest_framework.authentication
import
SessionAuthentication
...
@@ -14,6 +13,7 @@ from rest_framework.parsers import JSONParser
...
@@ -14,6 +13,7 @@ from rest_framework.parsers import JSONParser
from
rest_framework.renderers
import
JSONRenderer
from
rest_framework.renderers
import
JSONRenderer
from
rest_framework.viewsets
import
ModelViewSet
from
rest_framework.viewsets
import
ModelViewSet
from
djangoldp.models
import
LDPSource
,
Model
from
.serializers
import
LDPSerializer
from
.serializers
import
LDPSerializer
...
@@ -194,7 +194,8 @@ class LDPNestedViewSet(LDPViewSet):
...
@@ -194,7 +194,8 @@ class LDPNestedViewSet(LDPViewSet):
related_field
=
related_field
,
related_field
=
related_field
,
parent_lookup_field
=
cls
.
get_lookup_arg
(
**
kwargs
),
parent_lookup_field
=
cls
.
get_lookup_arg
(
**
kwargs
),
model_prefix
=
cls
.
get_model
(
**
kwargs
).
_meta
.
object_name
.
lower
(),
model_prefix
=
cls
.
get_model
(
**
kwargs
).
_meta
.
object_name
.
lower
(),
permission_classes
=
kwargs
.
get
(
'
permission_classes
'
,
()),
permission_classes
=
Model
.
get_permission_classes
(
related_field
.
related_model
,
kwargs
.
get
(
'
permission_classes
'
,
())),
lookup_url_kwarg
=
related_field
.
related_model
.
_meta
.
object_name
.
lower
()
+
'
_id
'
)
lookup_url_kwarg
=
related_field
.
related_model
.
_meta
.
object_name
.
lower
()
+
'
_id
'
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment