Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
R
re2o
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Nounous
re2o
Commits
048bcfad
Commit
048bcfad
authored
Dec 09, 2017
by
Maël Kervella
Committed by
root
Jan 06, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Create can_delete and can_view decorators and use them where it's possible
parent
876021ae
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
86 additions
and
68 deletions
+86
-68
cotisations/views.py
cotisations/views.py
+3
-12
machines/models.py
machines/models.py
+7
-3
machines/views.py
machines/views.py
+15
-42
re2o/utils.py
re2o/utils.py
+56
-3
users/views.py
users/views.py
+5
-8
No files found.
cotisations/views.py
View file @
048bcfad
...
@@ -43,7 +43,7 @@ from users.models import User
...
@@ -43,7 +43,7 @@ from users.models import User
from
re2o.settings
import
LOGO_PATH
from
re2o.settings
import
LOGO_PATH
from
re2o
import
settings
from
re2o
import
settings
from
re2o.views
import
form
from
re2o.views
import
form
from
re2o.utils
import
SortTable
,
can_create
,
can_edit
from
re2o.utils
import
SortTable
,
can_create
,
can_edit
,
can_delete
,
can_view
from
preferences.models
import
OptionalUser
,
AssoOption
,
GeneralOption
from
preferences.models
import
OptionalUser
,
AssoOption
,
GeneralOption
from
.models
import
Facture
,
Article
,
Vente
,
Paiement
,
Banque
from
.models
import
Facture
,
Article
,
Vente
,
Paiement
,
Banque
from
.forms
import
(
from
.forms
import
(
...
@@ -284,19 +284,10 @@ def edit_facture(request, facture, factureid):
...
@@ -284,19 +284,10 @@ def edit_facture(request, facture, factureid):
@
login_required
@
login_required
@
permission_required
(
'cableur'
)
@
can_delete
(
Facture
)
def
del_facture
(
request
,
factureid
):
def
del_facture
(
request
,
facture
,
facture
id
):
"""Suppression d'une facture. Supprime en cascade les ventes
"""Suppression d'une facture. Supprime en cascade les ventes
et cotisations filles"""
et cotisations filles"""
try
:
facture
=
Facture
.
objects
.
get
(
pk
=
factureid
)
except
Facture
.
DoesNotExist
:
messages
.
error
(
request
,
u
"Facture inexistante"
)
return
redirect
(
reverse
(
'cotisations:index'
))
if
facture
.
control
or
not
facture
.
valid
:
messages
.
error
(
request
,
"Vous ne pouvez pas editer une facture
\
controlée ou invalidée par le trésorier"
)
return
redirect
(
reverse
(
'cotisations:index'
))
if
request
.
method
==
"POST"
:
if
request
.
method
==
"POST"
:
with
transaction
.
atomic
(),
reversion
.
create_revision
():
with
transaction
.
atomic
(),
reversion
.
create_revision
():
facture
.
delete
()
facture
.
delete
()
...
...
machines/models.py
View file @
048bcfad
...
@@ -837,7 +837,7 @@ class Interface(models.Model):
...
@@ -837,7 +837,7 @@ class Interface(models.Model):
d'un autre user que vous sans droit"
d'un autre user que vous sans droit"
return
True
,
None
return
True
,
None
def
can_delete
(
self
,
user_re
s
quest
,
*
args
,
**
kwargs
):
def
can_delete
(
self
,
user_request
,
*
args
,
**
kwargs
):
if
not
user_request
.
has_perms
((
'cableur'
,))
and
self
.
machine
.
user
!=
user_request
:
if
not
user_request
.
has_perms
((
'cableur'
,))
and
self
.
machine
.
user
!=
user_request
:
return
False
,
u
"Vous ne pouvez pas éditer une machine d'un autre
\
return
False
,
u
"Vous ne pouvez pas éditer une machine d'un autre
\
user que vous sans droit"
user que vous sans droit"
...
@@ -1177,8 +1177,12 @@ class OuverturePortList(models.Model):
...
@@ -1177,8 +1177,12 @@ class OuverturePortList(models.Model):
return
True
,
None
return
True
,
None
def
can_delete
(
self
,
user_request
,
*
args
,
**
kwargs
):
def
can_delete
(
self
,
user_request
,
*
args
,
**
kwargs
):
return
user_request
.
has_perms
((
'bureau'
,)),
u
"Vous n'avez pas le droit
\
if
not
user_request
.
has_perms
((
'bureau'
,)):
de supprimer une ouverture de port"
return
False
,
u
"Vous n'avez pas le droit de supprimer une ouverture
\
de port"
if
self
.
interface_set
.
all
():
return
False
,
u
"Cette liste de ports est utilisée"
return
True
,
None
def
can_view
(
self
,
user_request
,
*
args
,
**
kwargs
):
def
can_view
(
self
,
user_request
,
*
args
,
**
kwargs
):
return
user_request
.
has_perms
((
'cableur'
,)),
u
"Vous n'avez pas le droit
\
return
user_request
.
has_perms
((
'cableur'
,)),
u
"Vous n'avez pas le droit
\
...
...
machines/views.py
View file @
048bcfad
...
@@ -125,7 +125,9 @@ from re2o.utils import (
...
@@ -125,7 +125,9 @@ from re2o.utils import (
filter_active_interfaces
,
filter_active_interfaces
,
SortTable
,
SortTable
,
can_create
,
can_create
,
can_edit
can_edit
,
can_delete
,
can_view
)
)
from
re2o.views
import
form
from
re2o.views
import
form
...
@@ -213,12 +215,12 @@ def generate_ipv4_mbf_param( form, is_type_tt ):
...
@@ -213,12 +215,12 @@ def generate_ipv4_mbf_param( form, is_type_tt ):
@
login_required
@
login_required
@
can_create
(
Machine
)
@
can_create
(
Machine
)
def
new_machine
(
request
,
userid
):
@
can_edit
(
User
)
def
new_machine
(
request
,
user
,
userid
):
""" Fonction de creation d'une machine. Cree l'objet machine,
""" Fonction de creation d'une machine. Cree l'objet machine,
le sous objet interface et l'objet domain à partir de model forms.
le sous objet interface et l'objet domain à partir de model forms.
Trop complexe, devrait être simplifié"""
Trop complexe, devrait être simplifié"""
user
=
User
.
objects
.
get
(
pk
=
userid
)
machine
=
NewMachineForm
(
request
.
POST
or
None
)
machine
=
NewMachineForm
(
request
.
POST
or
None
)
interface
=
AddInterfaceForm
(
interface
=
AddInterfaceForm
(
request
.
POST
or
None
,
request
.
POST
or
None
,
...
@@ -328,10 +330,10 @@ def del_machine(request, machineid):
...
@@ -328,10 +330,10 @@ def del_machine(request, machineid):
@
login_required
@
login_required
@
can_create
(
Interface
)
@
can_create
(
Interface
)
def
new_interface
(
request
,
machineid
):
@
can_edit
(
Machine
)
def
new_interface
(
request
,
machine
,
machineid
):
""" Ajoute une interface et son domain associé à une machine existante"""
""" Ajoute une interface et son domain associé à une machine existante"""
machine
=
Machine
.
objects
.
get
(
pk
=
machineid
)
interface_form
=
AddInterfaceForm
(
request
.
POST
or
None
,
infra
=
request
.
user
.
has_perms
((
'infra'
,)))
interface_form
=
AddInterfaceForm
(
request
.
POST
or
None
,
infra
=
request
.
user
.
has_perms
((
'infra'
,)))
domain_form
=
DomainForm
(
request
.
POST
or
None
)
domain_form
=
DomainForm
(
request
.
POST
or
None
)
if
interface_form
.
is_valid
():
if
interface_form
.
is_valid
():
...
@@ -358,20 +360,9 @@ def new_interface(request, machineid):
...
@@ -358,20 +360,9 @@ def new_interface(request, machineid):
return
form
({
'interfaceform'
:
interface_form
,
'domainform'
:
domain_form
,
'i_mbf_param'
:
i_mbf_param
},
'machines/machine.html'
,
request
)
return
form
({
'interfaceform'
:
interface_form
,
'domainform'
:
domain_form
,
'i_mbf_param'
:
i_mbf_param
},
'machines/machine.html'
,
request
)
@
login_required
@
login_required
def
del_interface
(
request
,
interfaceid
):
@
can_delete
(
Interface
)
def
del_interface
(
request
,
interface
,
interfaceid
):
""" Supprime une interface. Domain objet en mode cascade"""
""" Supprime une interface. Domain objet en mode cascade"""
try
:
interface
=
Interface
.
objects
.
get
(
pk
=
interfaceid
)
except
Interface
.
DoesNotExist
:
messages
.
error
(
request
,
u
"Interface inexistante"
)
return
redirect
(
reverse
(
'machines:index'
))
if
not
request
.
user
.
has_perms
((
'cableur'
,)):
if
interface
.
machine
.
user
!=
request
.
user
:
messages
.
error
(
request
,
"Vous ne pouvez pas éditer une machine d'un autre user que vous sans droit"
)
return
redirect
(
reverse
(
'users:profil'
,
kwargs
=
{
'userid'
:
str
(
request
.
user
.
id
)}
))
if
request
.
method
==
"POST"
:
if
request
.
method
==
"POST"
:
machine
=
interface
.
machine
machine
=
interface
.
machine
with
transaction
.
atomic
(),
reversion
.
create_revision
():
with
transaction
.
atomic
(),
reversion
.
create_revision
():
...
@@ -751,9 +742,9 @@ def del_srv(request):
...
@@ -751,9 +742,9 @@ def del_srv(request):
@
login_required
@
login_required
@
can_create
(
Domain
)
@
can_create
(
Domain
)
def
add_alias
(
request
,
interfaceid
):
@
can_edit
(
Interface
)
def
add_alias
(
request
,
interface
,
interfaceid
):
interface
=
Interface
.
objects
.
get
(
pk
=
interfaceid
)
alias
=
AliasForm
(
request
.
POST
or
None
,
infra
=
request
.
user
.
has_perms
((
'infra'
,)))
alias
=
AliasForm
(
request
.
POST
or
None
,
infra
=
request
.
user
.
has_perms
((
'infra'
,)))
if
alias
.
is_valid
():
if
alias
.
is_valid
():
alias
=
alias
.
save
(
commit
=
False
)
alias
=
alias
.
save
(
commit
=
False
)
...
@@ -787,18 +778,8 @@ def edit_alias(request, domain_instance, domainid):
...
@@ -787,18 +778,8 @@ def edit_alias(request, domain_instance, domainid):
return
form
({
'aliasform'
:
alias
},
'machines/machine.html'
,
request
)
return
form
({
'aliasform'
:
alias
},
'machines/machine.html'
,
request
)
@
login_required
@
login_required
def
del_alias
(
request
,
interfaceid
):
@
can_edit
(
Interface
)
try
:
def
del_alias
(
request
,
interface
,
interfaceid
):
interface
=
Interface
.
objects
.
get
(
pk
=
interfaceid
)
except
Interface
.
DoesNotExist
:
messages
.
error
(
request
,
u
"Interface inexistante"
)
return
redirect
(
reverse
(
'machines:index'
))
if
not
request
.
user
.
has_perms
((
'cableur'
,))
and
interface
.
machine
.
user
!=
request
.
user
:
messages
.
error
(
request
,
"Vous ne pouvez pas ajouter un alias à une machine d'un autre user que vous sans droit"
)
return
redirect
(
reverse
(
'users:profil'
,
kwargs
=
{
'userid'
:
str
(
request
.
user
.
id
)}
))
alias
=
DelAliasForm
(
request
.
POST
or
None
,
interface
=
interface
)
alias
=
DelAliasForm
(
request
.
POST
or
None
,
interface
=
interface
)
if
alias
.
is_valid
():
if
alias
.
is_valid
():
alias_dels
=
alias
.
cleaned_data
[
'alias'
]
alias_dels
=
alias
.
cleaned_data
[
'alias'
]
...
@@ -1191,16 +1172,8 @@ def edit_portlist(request, ouvertureportlist_instance, ouvertureportlistid):
...
@@ -1191,16 +1172,8 @@ def edit_portlist(request, ouvertureportlist_instance, ouvertureportlistid):
return
form
({
'port_list'
:
port_list
,
'ports'
:
port_formset
},
'machines/edit_portlist.html'
,
request
)
return
form
({
'port_list'
:
port_list
,
'ports'
:
port_formset
},
'machines/edit_portlist.html'
,
request
)
@
login_required
@
login_required
@
permission_required
(
'bureau'
)
@
can_delete
(
OuverturePortList
)
def
del_portlist
(
request
,
ouvertureportlistid
):
def
del_portlist
(
request
,
port_list_instance
,
ouvertureportlistid
):
try
:
port_list_instance
=
OuverturePortList
.
objects
.
get
(
pk
=
ouvertureportlistid
)
except
OuverturePortList
.
DoesNotExist
:
messages
.
error
(
request
,
"Liste de ports inexistante"
)
return
redirect
(
reverse
(
'machines:index-portlist'
))
if
port_list_instance
.
interface_set
.
all
():
messages
.
error
(
request
,
"Cette liste de ports est utilisée"
)
return
redirect
(
reverse
(
'machines:index-portlist'
))
port_list_instance
.
delete
()
port_list_instance
.
delete
()
messages
.
success
(
request
,
"La liste de ports a été supprimée"
)
messages
.
success
(
request
,
"La liste de ports a été supprimée"
)
return
redirect
(
reverse
(
'machines:index-portlist'
))
return
redirect
(
reverse
(
'machines:index-portlist'
))
...
...
re2o/utils.py
View file @
048bcfad
...
@@ -72,9 +72,9 @@ def can_create(model):
...
@@ -72,9 +72,9 @@ def can_create(model):
def
can_edit
(
model
):
def
can_edit
(
model
):
"""Decorator to check if an user can edit a model.
"""Decorator to check if an user can edit a model.
It tries to get an instance of the model, using
It tries to get an instance of the model, using
`model.get_instance(*args, **kwargs)` and assumes that the model has a
method
`model.get_instance(*args, **kwargs)` and assumes that the model has a
`can_create(user)` which returns `true` if the user can create this kind
method `can_edit(user)` which returns `true` if the user can edit this
of models.
kind
of models.
"""
"""
def
decorator
(
view
):
def
decorator
(
view
):
def
wrapper
(
request
,
*
args
,
**
kwargs
):
def
wrapper
(
request
,
*
args
,
**
kwargs
):
...
@@ -96,6 +96,59 @@ def can_edit(model):
...
@@ -96,6 +96,59 @@ def can_edit(model):
return
decorator
return
decorator
def
can_delete
(
model
):
"""Decorator to check if an user can delete a model.
It tries to get an instance of the model, using
`model.get_instance(*args, **kwargs)` and assumes that the model has a
method `can_delete(user)` which returns `true` if the user can delete this
kind of models.
"""
def
decorator
(
view
):
def
wrapper
(
request
,
*
args
,
**
kwargs
):
try
:
instance
=
model
.
get_instance
(
*
args
,
**
kwargs
)
except
model
.
DoesNotExist
:
messages
.
error
(
request
,
u
"Entrée inexistante"
)
return
redirect
(
reverse
(
'users:profil'
,
kwargs
=
{
'userid'
:
str
(
request
.
user
.
id
)}
))
can
,
msg
=
instance
.
can_delete
(
request
.
user
)
if
not
can
:
messages
.
error
(
request
,
msg
or
"Vous ne pouvez pas accéder à ce menu"
)
return
redirect
(
reverse
(
'users:profil'
,
kwargs
=
{
'userid'
:
str
(
request
.
user
.
id
)}
))
return
view
(
request
,
instance
,
*
args
,
**
kwargs
)
return
wrapper
return
decorator
def
can_view
(
model
):
"""Decorator to check if an user can view a model.
It tries to get an instance of the model, using
`model.get_instance(*args, **kwargs)` and assumes that the model has a
method `can_view(user)` which returns `true` if the user can view this
kind of models.
"""
def
decorator
(
view
):
def
wrapper
(
request
,
*
args
,
**
kwargs
):
try
:
instance
=
model
.
get_instance
(
*
args
,
**
kwargs
)
except
model
.
DoesNotExist
:
messages
.
error
(
request
,
u
"Entrée inexistante"
)
return
redirect
(
reverse
(
'users:profil'
,
kwargs
=
{
'userid'
:
str
(
request
.
user
.
id
)}
))
can
,
msg
=
instance
.
can_view
(
request
.
user
)
if
not
can
:
messages
.
error
(
request
,
msg
or
"Vous ne pouvez pas accéder à ce menu"
)
return
redirect
(
reverse
(
'users:profil'
,
kwargs
=
{
'userid'
:
str
(
request
.
user
.
id
)}
))
return
view
(
request
,
instance
,
*
args
,
**
kwargs
)
return
wrapper
return
decorator
def
all_adherent
(
search_time
=
DT_NOW
):
def
all_adherent
(
search_time
=
DT_NOW
):
""" Fonction renvoyant tous les users adherents. Optimisee pour n'est
""" Fonction renvoyant tous les users adherents. Optimisee pour n'est
...
...
users/views.py
View file @
048bcfad
...
@@ -92,7 +92,9 @@ from machines.models import Machine
...
@@ -92,7 +92,9 @@ from machines.models import Machine
from
preferences.models
import
OptionalUser
,
GeneralOption
from
preferences.models
import
OptionalUser
,
GeneralOption
from
re2o.views
import
form
from
re2o.views
import
form
from
re2o.utils
import
all_has_access
,
SortTable
,
can_create
,
can_edit
from
re2o.utils
import
(
all_has_access
,
SortTable
,
can_create
,
can_edit
,
can_delete
,
can_view
)
def
password_change_action
(
u_form
,
user
,
request
,
req
=
False
):
def
password_change_action
(
u_form
,
user
,
request
,
req
=
False
):
""" Fonction qui effectue le changeemnt de mdp bdd"""
""" Fonction qui effectue le changeemnt de mdp bdd"""
...
@@ -303,14 +305,9 @@ def edit_serviceuser(request, user, userid):
...
@@ -303,14 +305,9 @@ def edit_serviceuser(request, user, userid):
@
login_required
@
login_required
@
permission_required
(
'infra'
)
@
can_delete
(
ServiceUser
)
def
del_serviceuser
(
request
,
userid
):
def
del_serviceuser
(
request
,
user
,
user
id
):
"""Suppression d'un ou plusieurs serviceusers"""
"""Suppression d'un ou plusieurs serviceusers"""
try
:
user
=
ServiceUser
.
objects
.
get
(
pk
=
userid
)
except
ServiceUser
.
DoesNotExist
:
messages
.
error
(
request
,
u
"Utilisateur inexistant"
)
return
redirect
(
reverse
(
'users:index'
))
if
request
.
method
==
"POST"
:
if
request
.
method
==
"POST"
:
with
transaction
.
atomic
(),
reversion
.
create_revision
():
with
transaction
.
atomic
(),
reversion
.
create_revision
():
user
.
delete
()
user
.
delete
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment