Kaynağa Gözat

corretti alcuni errori di sicurezza in azienda

Mauro 9 ay önce
ebeveyn
işleme
74b8b14d78
31 değiştirilmiş dosya ile 133 ekleme ve 44 silme
  1. BIN
      amministratore/__pycache__/__init__.cpython-311.pyc
  2. BIN
      amministratore/__pycache__/admin.cpython-311.pyc
  3. BIN
      amministratore/__pycache__/apps.cpython-311.pyc
  4. BIN
      amministratore/__pycache__/forms.cpython-311.pyc
  5. BIN
      amministratore/__pycache__/models.cpython-311.pyc
  6. BIN
      amministratore/__pycache__/urls.cpython-311.pyc
  7. BIN
      amministratore/__pycache__/views.cpython-311.pyc
  8. 12 0
      amministratore/forms.py
  9. BIN
      amministratore/migrations/__pycache__/0001_initial.cpython-311.pyc
  10. BIN
      amministratore/migrations/__pycache__/0002_amministratore_uuid.cpython-311.pyc
  11. BIN
      amministratore/migrations/__pycache__/0003_amministratore_edit_azienda_and_more.cpython-311.pyc
  12. BIN
      amministratore/migrations/__pycache__/0004_amministratore_crea_comunicazione_and_more.cpython-311.pyc
  13. BIN
      amministratore/migrations/__pycache__/0005_amministratore_crea_permesso_and_more.cpython-311.pyc
  14. BIN
      amministratore/migrations/__pycache__/0006_rename_vedi_permesso_amministratore_read_permesso.cpython-311.pyc
  15. BIN
      amministratore/migrations/__pycache__/0007_permesso_ap.cpython-311.pyc
  16. BIN
      amministratore/migrations/__pycache__/0008_rename_permesso_ap_permesso.cpython-311.pyc
  17. BIN
      amministratore/migrations/__pycache__/0009_remove_amministratore_crea_azienda_and_more.cpython-311.pyc
  18. BIN
      amministratore/migrations/__pycache__/0010_rename_ap_amp.cpython-311.pyc
  19. BIN
      amministratore/migrations/__pycache__/0011_delete_amp_delete_permesso.cpython-311.pyc
  20. BIN
      amministratore/migrations/__pycache__/__init__.cpython-311.pyc
  21. 1 1
      amministratore/templates/amministratore.edit.html
  22. 2 3
      amministratore/templates/amministratore.edit.sede.html
  23. 40 5
      amministratore/views.py
  24. 9 1
      azienda/templates/azienda.welcome.html
  25. 29 25
      azienda/views.py
  26. 1 1
      documento/forms.py
  27. 4 0
      documento/templates/documento.welcome.html
  28. 6 2
      documento/templates/documento.welcome.lista.html
  29. 20 1
      documento/views.py
  30. 7 5
      sicurezza/views.py
  31. 2 0
      utente/templates/utente.welcome.html

BIN
amministratore/__pycache__/__init__.cpython-311.pyc


BIN
amministratore/__pycache__/admin.cpython-311.pyc


BIN
amministratore/__pycache__/apps.cpython-311.pyc


BIN
amministratore/__pycache__/forms.cpython-311.pyc


BIN
amministratore/__pycache__/models.cpython-311.pyc


BIN
amministratore/__pycache__/urls.cpython-311.pyc


BIN
amministratore/__pycache__/views.cpython-311.pyc


+ 12 - 0
amministratore/forms.py

@@ -64,3 +64,15 @@ class FormPermessoDaAggiungere(forms.Form):
   def __init__(self,*args,**kwargs):
     forms.Form.__init__(self,*args,**kwargs)
     self.fields['permessodaaggiungere'] = forms.IntegerField(required=True)
+
+class FormSedeMancante(forms.Form):
+  choices = []
+  def __init__(self,*args,lista=[],**kwargs):
+    forms.Form.__init__(self,*args,**kwargs)
+    self.fields['ListaSedeMancanteSelect'] = forms.MultipleChoiceField(required=True,widget=forms.CheckboxSelectMultiple(),choices=self.c(lista))
+
+  def c(self,lista):
+    for u in lista:
+      self.choices.append((u.id,u.nome),)
+    print('choices',len(self.choices))
+    return self.choices

BIN
amministratore/migrations/__pycache__/0001_initial.cpython-311.pyc


BIN
amministratore/migrations/__pycache__/0002_amministratore_uuid.cpython-311.pyc


BIN
amministratore/migrations/__pycache__/0003_amministratore_edit_azienda_and_more.cpython-311.pyc


BIN
amministratore/migrations/__pycache__/0004_amministratore_crea_comunicazione_and_more.cpython-311.pyc


BIN
amministratore/migrations/__pycache__/0005_amministratore_crea_permesso_and_more.cpython-311.pyc


BIN
amministratore/migrations/__pycache__/0006_rename_vedi_permesso_amministratore_read_permesso.cpython-311.pyc


BIN
amministratore/migrations/__pycache__/0007_permesso_ap.cpython-311.pyc


BIN
amministratore/migrations/__pycache__/0008_rename_permesso_ap_permesso.cpython-311.pyc


BIN
amministratore/migrations/__pycache__/0009_remove_amministratore_crea_azienda_and_more.cpython-311.pyc


BIN
amministratore/migrations/__pycache__/0010_rename_ap_amp.cpython-311.pyc


BIN
amministratore/migrations/__pycache__/0011_delete_amp_delete_permesso.cpython-311.pyc


BIN
amministratore/migrations/__pycache__/__init__.cpython-311.pyc


+ 1 - 1
amministratore/templates/amministratore.edit.html

@@ -7,7 +7,7 @@
   <button class="btn btn-primary active" id="amministratore-tab" data-bs-toggle="tab" data-bs-target="#amministratore-pane" type="button" role="tab" aria-controls="amministratore-pane" aria-selected="true">Amministratore</button>
   <button class="btn btn-primary" id="permesso-tab" data-bs-toggle="tab" data-bs-target="#permesso-pane" type="button" role="tab" aria-controls="permesso-pane" aria-selected="true">Permessi</button>
   <button class="btn btn-primary" id="azienda-tab" data-bs-toggle="tab" data-bs-target="#azienda-pane" type="button" role="tab" aria-controls="azienda-pane" aria-selected="true">Aziende</button>
-  <button class="btn btn-primary" id="zona-tab" data-bs-toggle="tab" data-bs-target="#zona-pane" type="button" role="tab" aria-controls="zona-pane" aria-selected="true">Zone</button>
+  <button class="btn btn-primary" id="zona-tab" data-bs-toggle="tab" data-bs-target="#zona-pane" type="button" role="tab" aria-controls="zona-pane" aria-selected="true">Sedi</button>
   <button class="btn btn-outline-primary" id="return-tab" data-bs-toggle="tab" data-bs-target="#return-pane" type="button" role="tab" aria-controls="return-pane" aria-selected="true"><a href="{% url 'amministratore:welcome' %}">Indietro</a></button>
 </div>
 <!-- end nav tabs -->

+ 2 - 3
amministratore/templates/amministratore.edit.sede.html

@@ -10,7 +10,7 @@
           <tr>
             <th scope='col'>Nome</th>
             <th scope='col'>Identificativo</th>
-            <th scope='col'>E</th>
+            <th scope='col'>ES</th>
             <th scope='col'>D</th>
           </tr>
         </thead>
@@ -79,8 +79,7 @@
               <form name='sededaaggiungereform' method='POST'>
                 {% csrf_token %}
   	        <td>
-                  <select class="form-select" name="sededaaggiungere" id="sededaaggiungere">
-  		    <option value="">-- Scegli Sede da aggiungere --</option>
+                  <select class="form-select" multiple name="ListaSedeMancanteSelect" id="listasedemancante">
 	            {% for lp in listasedediff %}
 		      <option value="{{ lp.id }}">{{ lp.nome }} - {{ lp.identificativo}}</option>
                     {% endfor %}

+ 40 - 5
amministratore/views.py

@@ -247,8 +247,8 @@ def edit(request):
           azp = AZP()
           azp.azienda = aztoadd
           azp.amministratore = amministratore
-          azp.permesso = getPermesso("AMMINISTRATORE")
-          print('permesso base',getPermesso("AMMINISTRATORE").nome)
+          azp.permesso = getPermesso("AZIENDA")
+          print('permesso base',getPermesso("AZIENDA").nome)
           azp.save()
           print(azp.id)
       data['pane']='Azienda'
@@ -259,14 +259,49 @@ def edit(request):
       if formaziendaselect.is_valid():
         print('FormAziendaSelect valido')
         aziendaselect = formaziendaselect.cleaned_data.get('AziendaSelect')
+        request.session['aziendaselect'] = aziendaselect
+        print('aziendaselect',aziendaselect)
         # una volta ottenuta l'azienda, selezioniamo le sedi:
-        data['listasede'] =  Azienda.objects.get(pk=aziendaselect).sede_set.all()
+        # le selezioni sono due:
+        # 1 lista delle sedi gia' associate all'utente attraverso il permesso(SEP)
+        # 2 lista delle sedi ancora da assegnare (tolte le sedi gia' assegnate)
+
+        data['listasede'] =  listaSEP(aziendaselect,amministratore)[0]
+        data['listasedediff']= list(set(Azienda.objects.get(pk=aziendaselect).sede_set.all()) - set(listaSEP(aziendaselect,amministratore)[0]))
         print("lista sede",len(data['listasede']))
-        data['pane']='Sede'
+        data['pane']='Azienda'
 
     if 'SedeConfermaCancellazionePermesso' in request.POST:
       print('Richiesta cancellazione Permessi Sede')
 
+    if 'SedeDaAggiungereButton' in request.POST:
+      if 'aziendaselect' in request.session:
+        aziendaselect = request.session.get('aziendaselect')
+      print('Richiesta Sede da aggiungere')
+      data['listasede'] =  listaSEP(aziendaselect,amministratore)[0]
+      data['listasedediff']= list(set(Azienda.objects.get(pk=aziendaselect).sede_set.all()) - set(listaSEP(aziendaselect,amministratore)[0]))
+      print('listasedediff len',len(data['listasedediff']))
+
+      formsedemancante = FormSedeMancante(request.POST,lista=data['listasedediff'])
+      #formsedemancante.c(data['listasedediff'])
+      if 'ListaSedeMancante' in request.POST:
+        print('ListaSedeMancante',request.POST['ListaSedeMancanteSelect'])
+      if formsedemancante.is_valid():
+        listasedemancante = formsedemancante.cleaned_data.get('ListaSedeMancanteSelect')
+        print(listasedemancante)
+        for lsm in listasedemancante:
+          sep = SEP()
+          sep.permesso = Permesso.objects.get(nome='SEDE')
+          sep.amministratore = amministratore
+          sep.sede = Sede.objects.get(pk=lsm)
+          print("sede",lsm,sep.sede.nome)
+          print("ammi",lsm,sep.amministratore.login)
+          print("perm",lsm,sep.permesso.nome)
+          sep.save()
+      else: print(formsedemancante)
+
+      data['pane'] = 'Sede'
+
   tmp = dict()
   tmp['nome'] = amministratore.nome
   tmp['login'] = amministratore.login
@@ -293,5 +328,5 @@ def edit(request):
     listaaziendatutte = Azienda.objects.all()
     data['listaaziendadiff'] = list(set(listaaziendatutte)-set(data['listaazienda']))
     print('Differenza aziende',len(data['listaaziendadiff']))
-
+ 
   return render(request,'amministratore.edit.html',data)

+ 9 - 1
azienda/templates/azienda.welcome.html

@@ -8,14 +8,22 @@
     {% if azienda %}
       <button type="submit" class='btn btn-primary' name="utenti" value="{{ azienda.id }}">Dipendenti</button>
       <button type='submit' class="btn btn-primary" name="documenti" value='{{ azienda.id }}'>Documenti</button>
+      {% if 'ATTIVITA' in permesso %}
       {% if listaAttivitaxAzienda %}
         <button type 'submit' class='btn btn-primary' name="xx" value='{{ azienda.id }}'>Attività proprie</button>
       {% else %}
         <button type='submit' class='btn btn-primary' name="attivita" value='{{ azienda.id }}'>Tutte le Attività</button>
       {% endif %}
-      <button type='submit' class='btn btn-primary' name='comunicazioni' value='{{ azienda.id }}'>Comunicazioni</button>
+      {% endif %}
+      {% if 'COMUNICAZIONE' in permesso %}
+        <button type='submit' class='btn btn-primary' name='comunicazioni' value='{{ azienda.id }}'>Comunicazioni</button>
+      {% endif %}
+      {% if 'AZIENDA.EDIT' in permesso %}
       <button type='submit' class='btn btn-primary' name='parazienda' value='{{ azienda.id }}'>Par.Azienda</button>
+      {% endif %}
+      {% if 'SEDE.EDIT' in permesso %}
       <button type='submit' class='btn btn-primary' name='parsede' value='{{ sede.id }}' {% if not sede.id %} disabled {% endif %}>Par.Sede</button>
+      {% endif %}
     {% endif %}
   </form>
   </div>

+ 29 - 25
azienda/views.py

@@ -246,6 +246,16 @@ def editAzienda(request):
       print("il form e' valido",request.POST)
       if not azienda:
         azienda = Azienda()
+        setAZP(azienda,data['admin'],"AZIENDA")
+        if 'AZIENDA.CREA' in getAMP(data['admin'])[0]:
+          setAZP(azienda,data['admin'],"AZIENDA.CREA")
+        if 'AZIENDA.EDIT' in getAMP(data['admin'])[0]:
+          setAZP(azienda,data['admin'],"AZIENDA.EDIT")
+        if 'UTENTE' in getAMP(data['admin'])[0]:
+          setAZP(azienda,data['admin'],"UTENTE")
+        if 'UTENTE.CREA' in getAMP(data['admin'])[0]:
+          setAZP(azienda,data['admin'],"UTENTE.CREA")
+
       azienda.nome = nuovaazienda.cleaned_data.get('nome')
       azienda.mail = nuovaazienda.cleaned_data.get('mail')
       azienda.partitaiva = nuovaazienda.cleaned_data.get('partitaiva')
@@ -255,20 +265,10 @@ def editAzienda(request):
       request.session['AziendaIdEdit'] = azienda.id
       print('azienda:',azienda.id)
 
-      setAZP(azienda,data['admin'],"AZIENDA")
-      if 'AZIENDA.CREA' in getAMP(data['admin'])[0]:
-        setAZP(azienda,data['admin'],"AZIENDA.CREA")
-      if 'AZIENDA.EDIT' in getAMP(data['admin'])[0]:
-        setAZP(azienda,data['admin'],"AZIENDA.EDIT")
-      if 'UTENTE' in getAMP(data['admin'])[0]:
-        setAZP(azienda,data['admin'],"UTENTE")
-      if 'UTENTE.CREA' in getAMP(data['admin'])[0]:
-        setAZP(azienda,data['admin'],"UTENTE.CREA")
-
-      assegnazione = AssegnazioneAzienda()
-      assegnazione.azienda=azienda
-      assegnazione.amministratore=Amministratore.objects.get(pk=AdminId)
-      assegnazione.save()
+      #assegnazione = AssegnazioneAzienda()
+      #assegnazione.azienda=azienda
+      #assegnazione.amministratore=Amministratore.objects.get(pk=AdminId)
+      #assegnazione.save()
 
       del request.session['AziendaIdEdit']
       return HttpResponseRedirect(reverse('azienda:welcome'))
@@ -382,16 +382,18 @@ def editSede(request):
       print('sede:',sede.id)
       print('azienda',sede.azienda.nome)
 
-      setSEP(sede,data['admin'],"SEDE")
-      if 'SEDE.CREA' in getAMP(data['admin'])[0]:
-        setSEP(sede,data['admin'],"SEDE.CREA")
-      if 'SEDE.EDIT' in getAMP(data['admin'])[0]:
-        setSEP(sede,data['admin'],"SEDE.EDIT")
-      if 'UTENTE' in getAMP(data['admin'])[0]:
-        setSEP(sede,data['admin'],"UTENTE")
-      if 'UTENTE.CREA' in getAMP(data['admin'])[0]:
-        setSEP(sede,data['admin'],"UTENTE.CREA")
-
+      if 'SedeIdEdit' not in request.session:
+        setSEP(sede,data['admin'],"SEDE")
+        if 'SEDE.CREA' in getAMP(data['admin'])[0]:
+          setSEP(sede,data['admin'],"SEDE.CREA")
+        if 'SEDE.EDIT' in getAMP(data['admin'])[0]:
+          setSEP(sede,data['admin'],"SEDE.EDIT")
+        if 'UTENTE' in getAMP(data['admin'])[0]:
+          setSEP(sede,data['admin'],"UTENTE")
+        if 'UTENTE.CREA' in getAMP(data['admin'])[0]:
+          setSEP(sede,data['admin'],"UTENTE.CREA")
+
+      '''
       # verifica assegnazione
       az = AssegnazioneSede.objects.filter(sede=sede,amministratore=admin)
       print('assegnazione',az)
@@ -402,6 +404,7 @@ def editSede(request):
         az.save()
         print(sede.nome,admin.nome)
         print('az.admin',az.sede,az.amministratore.nome)
+      '''
       return HttpResponseRedirect(reverse('azienda:welcome'))
     else:
       print("form non valido")
@@ -417,7 +420,8 @@ def editSede(request):
     tmp['otppassword'] = sede.otppassword
     print('stato tmp',tmp)
     data['sedeForm'] = formSede(tmp)
-    data['listaAmministratore'],oggetti = listaAMMperSede(SedeId)
+    if SedeId:
+      data['listaAmministratore'],oggetti = listaAMMperSede(SedeId)
 
   return render(request,'azienda.editSede.html',data)
  

+ 1 - 1
documento/forms.py

@@ -38,4 +38,4 @@ class formMultipleCheckBox(forms.Form):
   def c(self,lista):
     for u in lista:
       self.choices.append((u.id,u.id),)
-    print('choices',self.choices)
+    print('choices',len(self.choices))

+ 4 - 0
documento/templates/documento.welcome.html

@@ -15,8 +15,12 @@ function toggle(source) {
 <!-- Nav tabs -->
 <div class="button-group" role="tablist">
   <button class="btn btn-primary active" id="documento-tab" data-bs-toggle="tab" data-bs-target="#documento-pane" type="button" role="tab" aria-controls="documento-pane" aria-selected="true">Documento</button>
+  {% if 'DOCUMENTO.CREA' in permesso %}
   <button class="btn btn-primary" id="upload-tab" data-bs-toggle="tab" data-bs-target="#upload-pane" type="button" role="tab" aria-controls="upload-pane" aria-selected="true">Upload</button>
+  {% endif %}
+  {% if 'DOCUMENTO.EDIT' in permesso %}
   <button class="btn btn-primary" id="delete-tab" data-bs-toggle="tab" data-bs-target="#delete-pane" type="button" role="tab" aria-controls="delete-pane" aria-selected="true">Cancella Vecchi</button>
+  {% endif %}
   <button class="btn btn-outline-primary" id="return-tab" data-bs-toggle="tab" data-bs-target="#return-pane" type="button" role="tab" aria-controls="return-pane" aria-selected="true"><a href="{% url 'azienda:welcome' %}">Indietro</a></button>
 </div>
 <!-- end nav tabs -->

+ 6 - 2
documento/templates/documento.welcome.lista.html

@@ -14,12 +14,14 @@
         <th scope='col'>Descrizione</th>
         <th scope='col'>Inserimento</th>
 	<th scope='col'><input class="form-check-input" type="checkbox" id="selectAll" name="selectAll" value='0' onClick="toggle(this);"/>&nbsp;<label for="selectAll" class="form-check-label">Tutti</label></th>
-        <th scope='col'>Cancella</th> 
+        {% if 'DOCUMENTO.EDIT' in permesso %}
+        <th scope='col'>Elimina</th> 
+        {% endif %}
       </tr>
       </thead>
       <tbody>
         {% for documento in ElencoDocumenti %}
-        {% if not permesso %}
+        {% if 'DOCUMENTO' in permesso %}
         <tr>
           <td><input type='checkbox' class='form-check-input' value='{{ documento.id }}' name='selezione'></td>
           <td> <button type='button' class='btn btn-primary' onclick="window.open('{% url "documento:finalize" documento.id documento.utente.id%}')">Vedi</button></td>
@@ -29,7 +31,9 @@
           <td>{{ documento.dataupload | date:'d/m/Y' }} </td>
 	  <td><input class="form-check-input" type="checkbox" form="ElencoDocumenti" id="select-{{ documento.id }}" name="select" value='{{ documento.id }}'/>
           </td>
+            {% if 'DOCUMENTO.EDIT' in permesso %}
             <td><button type='button' class='btn btn-primary' data-bs-toggle='modal' data-bs-target='#ConfirmDeleteModal{{ documento.id }}' value='{{ documento.id }}'>Elimina</button></td>
+            {% endif %}
         </tr>
           <!-- Modal -->
           <div class="modal fade" id="ConfirmDeleteModal{{ documento.id }}" tabindex="-1" role="dialog" aria-labelledby="ConfirmDeleteLabel{{ document.id }}" aria-hidden="true">

+ 20 - 1
documento/views.py

@@ -12,6 +12,7 @@ from .forms import *
 from config.views import *
 from .managefile import *
 from att.views import *
+from sicurezza.views import *
 
 from datetime import datetime,timedelta
 from comunicazione.views import ServizioMail
@@ -78,6 +79,7 @@ def welcome(request,utente=None):
   data['eol'] = eol
 
   ElencoDocumenti = list()
+
   if utente: #visualizza i documenti per l'utente
     ElencoDocumenti = Documento.objects.filter(utente=utente).order_by("utente__nome","documento") 
   elif sede:
@@ -92,9 +94,26 @@ def welcome(request,utente=None):
       d = t.documento_set.all()
       for id in d:
         ElencoDocumenti.append(id)
-
+  print('ElencoDocumenti',len(ElencoDocumenti))
   data['ElencoDocumenti'] = ElencoDocumenti
 
+  print('inizio sequenza permessi')
+  ### permessi inizio ###
+  data['permesso'] = getAMP(admin)[0]
+  print('permesso:',data['permesso'])
+
+  if 'AziendaId' in data:
+    for t in getAZP(data['AziendaId'],admin):
+      if t not in data['permesso']:
+        data['permesso'].append(t)
+        print('permesso_azienda',getAZP(data['AziendaId'],admin))
+    if 'sede' in data:
+      for t in getSEP(data['sede'],admin):
+        if t not in data['permesso']:
+          data['permesso'].append(t)
+          print('permesso_sede',getSEP(data['sede'],admin))
+         ### permessi fine ###
+
   if request.method == 'POST':
     if 'indietro' in request.POST:
       print("AziendaId",request.session['AziendaId'])

+ 7 - 5
sicurezza/views.py

@@ -169,7 +169,7 @@ def listaAZP(amministratore=None):
 
   print('dati rilevati',amm.id,amm.login)
 
-  lam = amm.azp_set.filter(permesso__nome="AMMINISTRATORE")
+  lam = amm.azp_set.filter(permesso__nome="AZIENDA")
   print('lunghezza LAM',lam)
 
   aziende = list()
@@ -212,17 +212,19 @@ def listaSEP(azienda=None,amministratore=None):
 
   print('dati rilevati',amm.id,amm.login)
 
-  lam = amm.sep_set.filter(amministratore=amm,permesso__nome="AMMINISTRATORE")
+  lam = amm.sep_set.filter(permesso__nome="SEDE")
   print('lunghezza LAM',lam)
 
+  print('cazzo!')
   sedi = list()
   oggetto = list()
+
   for p in lam:
-    aziende.append(p.azienda)
+    sedi.append(p.sede)
     oggetto.append(p)
 
-  print('aziende disponibili',len(aziende))
-  return (aziende,oggetto)
+  print('sedi disponibili',len(sedi))
+  return (sedi,oggetto)
 
 #riporta l'elenco dei permessi per sede filtrato per amministratore
 def getSEP(sede=None,amministratore=None):

+ 2 - 0
utente/templates/utente.welcome.html

@@ -35,7 +35,9 @@ function toggle(source) {
         <th scope='col'>Sede</th>
         <th scope='col'>Data di Nascita</th>
 	<th scope='col'>Luogo di Nascita</th>
+        {% if "DOCUMENTO" in permesso %}
 	<th scope='col'>documenti</th>
+        {% endif %}
         {% if "UTENTE.EDIT" in permesso %}
           <th scope='col'>Mail</th>
   	  <th scope='col'>Pin</th>