.. _users: ************************************************************************************ Utenti e Gruppi ************************************************************************************ .. contents:: Contenuti ================================================================================ Premesse ================================================================================ Sanet prevede due tipi di *interfacce utente* per l'accesso ai dati: * :ref:`WEB-MAIN` * L'accesso tramite credenziali e' obbligatorio. * :ref:`CLI-MAIN` * L'accesso tramite credenziali e' *opzionale* e puo' essere abilitato/disabilitato da file configurazione. In entrambi i casi, l'accesso ai dati di Sanet viene regolato attraverso la gestione di: * utenze con credenziali di accesso (*username*, *password*). * gruppi di utenze. * *capability* generiche. * permessi di accesso in lettura/scrittura alle singole risorse configurate. ================================================================================ Utenti ================================================================================ Dati di base -------------- Questi sono i dati associati ad ogni utenza: +---------------+---------------------------------------------------------+ | Dato | Descrizione | +===============+=========================================================+ | username | Username utilizzato per le procedure di autenticazione | +---------------+---------------------------------------------------------+ | firstname | Nome associato all'utente. | +---------------+---------------------------------------------------------+ | lastname | Cognome associato all'utente. | +---------------+---------------------------------------------------------+ | email | Indirizzo email associato all'utenza. | +---------------+---------------------------------------------------------+ .. important: in base al sistema di autenticazione usato, la password potrebbe non essere memorizzata nel DB di Sanet. Tipi di utenti ----------------- Si distinguono due tipi di utenti: * Superutenti o amministratori o admin. I superutenti possono accedere a tutte le funzionalita' del sistema **senza nessun tipo di restrizione**. * Utenti (normali) L'accesso alle diverse funzionalita' del sistema e' regolamentato da un sistema di gruppi/capabilities descritto in seguito. Abilitazione/Disabilitazione utenti ---------------------------------------- Un utente puo' essere *attivo* o *disabilitato*. Gli utenti (anche admin) *disabilitati* non possono effettuare il login (indipendentemente dalla validita' delle credenziali usate). Username lowercase ---------------------------------------- Gli username delle utenze in sanet3 devono rispettare le seguenti regole: * possono contenere solo carattere alfabetici lowercase * possono contenere numeri (ma non possono iniziare con numeri) .. important:: L'interfaccia web di Sanet3 puo' essere configurata per accettare o meno username anche con caratteri maiuscoli alfabetici in maiuscolo. Per alterare questo comportamento bisogna cambiare la costante AUTH_WEB_LOGIN_USERNAME_CASE_SENSITIVE nel file *settings.py*. .. important:: Anche se la procedura di login WEB puo' supportare username con caratteri in maiuscolo, i moduli di autenticazione gestiscono sempre e comunque *username* con caratteri solo in minuscolo. Password e metodi di autenticazione ---------------------------------------- Il sistema di autenticazione degli utenti (verifica username/password) e' regolato da moduli di autenticazione. E' possibile utilizzare piu' moduli di autenticazione contemporaneamente. Si rimanda alla sezione :ref:`authentication-modules` per dettagli. ================================================================================ Gruppi ================================================================================ Introduzione -------------------------------------------------------------------------------- Le diverse funzionalita' di Sanet sono accessibili tramite interfaccia utente da parte di un utente solo se questo e' in possesso delle opportune autorizzazioni. Per semplificare la configurazione della autorizzazioni, gli utenti sono organizzati logicamente in *gruppi*. Le autorizzazioni/permessi vengono assegnate ad un *gruppo*. Gli utenti ereditano le autorizzazioni/permessi dai gruppi di cui fanno parte. Valgono le seguenti regole di associazione *utente*/*gruppo*: 1) Un gruppo puo' contenere zero o piu' utenti. 2) Un utente puo' far parte di piu' gruppi. .. note:: come gia' detto, gli utenti *superuser* o *amministratori* fanno eccezione e possono sempre accedere a tutte le funzionalita/risorse del sistema. Gruppi e Tenant ---------------------------------------- La visibilita' dei dati di un tenant da parte di un utente e' sempre mediata attraverso l'appartenenza ad un gruppo. Un gruppo puo' essere configurato per accedere ai dati di monitoraggio di zero o piu' tenant. Tutti gli utenti appartenti ad un gruppo, possono vedere i dati dei tenant visibili da quel gruppo .. digraph:: prova user1; user2; user3; group1; group2; tenant1; tenant2; tenant3; user1 -> group1; user2 -> group1; user3 -> group2; user3 -> group3; group1 -> tenant1; group3 -> tenant1; group2 -> tenant2; group2 -> tenant3; .. _users-groups-default-tenant: Tenant di default per utente ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Per ogni utente e' possibile indicare un tenant di default tra quelli visibili da quell'utente. Accesso al tenanti di default tramite interfaccia web +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Quando un utente effettua la procedura di autenticazione viene "posizionato" sul suo tenant di default. L'algoritmo per la sezione del tenant di default e' la seguente: :: step 1) Se esiste un tenant configurato di default, restituisce quello. step 2) Trova tutti i tenant visibili dai gruppi a cui appartiene l'utente. Se tra questi c'e' il tenant primario, restituisce quello. Se non c'e' nessun primario, restituisce il primo tenant in ordine alfabetico. step 3) Se l'utente e' admin, comunque visualizza il tenant primary. ================================================================================ Gruppi e Capabilities generiche ================================================================================ Le azioni che gruppo e' autorizzato o meno a fare da *interfaccia utente* sui dati di Sanet sono regolamentate da un sistema di *capabilites*. Ad ogni azione e' associata una *capability*. Se un gruppo e' autorizzato a quella *capability* puo' effettuare l'azione corrispondente. Questo e' l'elenco delle capability previste: .. automodule:: core.capabilities Per la configurazione delle capability si rimanda alla sezione :ref:`users_groups_configuration`. ================================================================================ Permessi ================================================================================ Ownership ------------------------------------------------------------------ Viene definito *owner* (o proprietario) l'utente che crea una determinata entita' nel database di Sanet. * L'*owner* di un *datagroup-template* e' l'utente che crea il template. * L'*owner* di un *element-template* (node-template, interface-template, ecc.) e' l'utente che crea il template. * L'*owner* di un *nodo* e tutte le sue sotto-entita' (e datagroup/condition/ecc.) e' l'utente che ha creato il nodo. * L'*owner* di un *tag* e' l'utente che ha creato il tagtree in cui risiede quel tag. L'utente *owner* ha sempre accesso alle entita' da lui create, indipendentemente dai gruppi/permessi configurati. Quando un utente viene rimosso dal sistema, le entita' da lui create assumono *owner* nullo. .. important:: Solo gli utenti *admin* possono vedere/accedere ad entita' con owner nullo. .. important:: Solo gli utenti *admin* possono cambiare l'*owner* associato ad una entita'. Gruppi e tipologie di permessi (ACL) ------------------------------------------------------------------ Esistono due tipologie di permessi che possono essere configurate per accedere ad una entita' in Sanet: * READ-ONLY (o semplicemente READ): l'utente in possesso di questo permesso puo' *vedere* una entita'. * READ-WRITE: l'utente in possesso di questo permesso puo' *vedere* e *modificare* una entita'. I permessi vengono assegnati a livello di *gruppo* per ogni *tenant*. Un utente eredita tutti i permessi di tutti gruppi a cui appartiene. In presenza di due tipi di permessi diversi sulla stessa entita', eredita il permesso piu' autorizzativo (READ-WRITE vince su READ-ONLY) Permessi dei gruppi sui datagroup-template di un tenant ------------------------------------------------------------------ I permessi read/write su un datagroup-template di un tenant deve essere indicato per ogni gruppo. Permessi dei gruppi sugli element-template ------------------------------------------------------------------ I permessi read/write su un datagroup-template di un tenant deve essere indicato per ogni gruppo. Permessi dei gruppi su tagtree ------------------------------------------------------------------ I permessi read/write su un datagroup-template di un tenant deve essere indicato per ogni gruppo. Permessi dei gruppi sugli elementi di monitoraggio ------------------------------------------------------------------ L'accesso in read/write agli elementi di monitoraggio viene configurato indirettamente tramite il *tagging*. Se un elemento di monitoraggio compare all'interno di un *tag* definito in un *tagtree*, un utente ha accesso a quell'elemento con i permessi corrispondenti ai permessi che ha sul *tagtree*. .. important:: Un utente puo' *taggare* un elemento in un *tagtree* su cui ha permessi READ-WRITE solo se ha gia' precedenti permessi READ-WRITE (su altri *tagtree*). Permessi e datagroup-template della LIBRARY ------------------------------------------------------------------ Solo gli utenti *admin* possono accedere in scrittura sui datagroup-template definiti nella library. Gli utenti normali possono accedere in lettura ai datagroup-template definiti nella library. ================================================================================ Utente predefinito e gruppo predefinito ================================================================================ Quando il sistema viene installato la prima volta, viene creato automaticamente un utente amministratore predefinito e un gruppo associato a questo utente. .. note:: Username e group name sono modificabili da file di configurazione, vedi *DEFAULT_ADMIN_USERNAME* in *{{SANET_INSTALL_DIR}}/conf/default_settings.py* o anche: :: $ sanet-data get_config DEFAULT_ADMIN_USERNAME $ sanet-data get_config DEFAULT_ADMIN_GROUP .. _users_groups_configuration: ================================================================================ Configurazione ================================================================================ CLI -------------------------------------------------------------------------------- Si rimanda alla sezione: :ref:`cli-config-users-groups`. Web -------------------------------------------------------------------------------- In preparazione. .. TODO .. image:: ../_static/web/configuration/configuration_capabilities.png Altri comandi ------------- Si rimanda alla sezione: :ref:`management-commands-users`.