Option authentification pour table avec droits particuliers.
This commit is contained in:
parent
5fd101543e
commit
e23b9e80c0
@ -28,6 +28,7 @@ from qgis.core import (
|
|||||||
from qgis.PyQt.QtWidgets import (
|
from qgis.PyQt.QtWidgets import (
|
||||||
QDialog,
|
QDialog,
|
||||||
QPushButton,
|
QPushButton,
|
||||||
|
QInputDialog,
|
||||||
QTableWidgetItem,
|
QTableWidgetItem,
|
||||||
QMessageBox,
|
QMessageBox,
|
||||||
QVBoxLayout,
|
QVBoxLayout,
|
||||||
@ -66,13 +67,16 @@ itemIconVecteur.setIcon(icon)
|
|||||||
try:
|
try:
|
||||||
account = login_base('account')
|
account = login_base('account')
|
||||||
user = account[0] # Nom d'utilisateur
|
user = account[0] # Nom d'utilisateur
|
||||||
|
user_save = account[0] # Nom d'utilisateur sauvegarde
|
||||||
mdp = account[1] # Mot de passe
|
mdp = account[1] # Mot de passe
|
||||||
|
mdp_save = account[1] # Mot de passe sauvegard
|
||||||
host = account[2] # Hôte de la base de données
|
host = account[2] # Hôte de la base de données
|
||||||
port = account[3] # Port de connexion
|
port = account[3] # Port de connexion
|
||||||
dbname = account[4] # Nom de la base de données
|
dbname = account[4] # Nom de la base de données
|
||||||
sigdb = account[5] # Base de données SIG
|
sigdb = account[5] # Base de données SIG
|
||||||
refdb = account[6] # Base de données REF
|
refdb = account[6] # Base de données REF
|
||||||
|
|
||||||
|
|
||||||
except NameError:
|
except NameError:
|
||||||
print('Fails to login DB for account')
|
print('Fails to login DB for account')
|
||||||
|
|
||||||
@ -90,6 +94,7 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
Classe principale de l'éditeur de flux
|
Classe principale de l'éditeur de flux
|
||||||
Gère l'interface de sélection et de chargement des couches depuis les bases de données
|
Gère l'interface de sélection et de chargement des couches depuis les bases de données
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
"""Initialisation de l'interface et des composants"""
|
"""Initialisation de l'interface et des composants"""
|
||||||
_ = parent
|
_ = parent
|
||||||
@ -178,6 +183,10 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.DeBUG.hide()
|
self.DeBUG.hide()
|
||||||
|
|
||||||
def bd_source(self):
|
def bd_source(self):
|
||||||
|
global user, mdp
|
||||||
|
if user != user_save or mdp != mdp_save:
|
||||||
|
user = user_save
|
||||||
|
mdp = mdp_save
|
||||||
"""Sélectionne la base de données source (SIG ou REF)"""
|
"""Sélectionne la base de données source (SIG ou REF)"""
|
||||||
self.activateWindow()
|
self.activateWindow()
|
||||||
bd_origine = self.comboBox_2.currentText()
|
bd_origine = self.comboBox_2.currentText()
|
||||||
@ -573,6 +582,7 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.chargement_flux()
|
self.chargement_flux()
|
||||||
|
|
||||||
def chargement_flux(self):
|
def chargement_flux(self):
|
||||||
|
global cur, con, dbtype
|
||||||
"""Charge les couches sélectionnées dans QGIS"""
|
"""Charge les couches sélectionnées dans QGIS"""
|
||||||
managerAU = QgsApplication.authManager()
|
managerAU = QgsApplication.authManager()
|
||||||
managerAU.availableAuthMethodConfigs().keys()
|
managerAU.availableAuthMethodConfigs().keys()
|
||||||
@ -608,9 +618,36 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
for row in range(0, self.tableWidget_2.rowCount()):
|
for row in range(0, self.tableWidget_2.rowCount()):
|
||||||
color_rgba_db = 855030089 # Code couleur pour couche dans autre BD
|
color_rgba_db = 855030089 # Code couleur pour couche dans autre BD
|
||||||
color_rgba_droit = 851150528 # Code couleur pour droits insuffisants
|
color_rgba_droit = 851150528 # Code couleur pour droits insuffisants
|
||||||
|
self.QMBquestionNoLogin = QMessageBox()
|
||||||
if self.tableWidget_2.item(row, 1).background().color().rgba() == color_rgba_droit:
|
if self.tableWidget_2.item(row, 1).background().color().rgba() == color_rgba_droit:
|
||||||
self.QMBquestion = QMessageBox.question(iface.mainWindow(), u"Attention !", "Vous ne disposez pas des droit pour la couche «" + str(self.tableWidget_2.item(row, 1).text()) + ' ' + str(self.tableWidget_2.item(row, 2).text()) + "» !", QMessageBox.StandardButton(0x00004000))
|
self.QMBquestionNoLogin.setWindowTitle(u"Attention !")
|
||||||
elif self.tableWidget_2.item(row, 1).background().color().rgba() != color_rgba_db:
|
self.QMBquestionNoLogin.setIcon(QMessageBox.Icon.Warning)
|
||||||
|
self.QMBquestionNoLogin.setText("Vous ne disposez pas des droit pour la couche «" + str(self.tableWidget_2.item(row, 1).text()) + ' ' + str(self.tableWidget_2.item(row, 2).text()) + "» !")
|
||||||
|
self.QMBquestionNoLogin.setStandardButtons(QMessageBox.StandardButton(0x00004000) | QMessageBox.StandardButton(0x00080000))
|
||||||
|
self.QMBquestionNoLogin = self.QMBquestionNoLogin.exec()
|
||||||
|
# self.QMBquestionNoLogin = QMessageBox.question(iface.mainWindow(), u"Attention !", "Vous ne disposez pas des droit pour la couche «" + str(self.tableWidget_2.item(row, 1).text()) + ' ' + str(self.tableWidget_2.item(row, 2).text()) + "» !", QMessageBox.StandardButton(0x00004000), QMessageBox.StandardButton(0x00080000))
|
||||||
|
if self.QMBquestionNoLogin != QMessageBox.StandardButton(0x00004000):
|
||||||
|
self.InputDialog = QInputDialog()
|
||||||
|
user_bypass = (self.InputDialog.getText(None, 'Foncier', 'Identifiant:'))[0]
|
||||||
|
mdp_bypass = (self.InputDialog.getText(None, 'Foncier', 'Mot de pass:'))[0]
|
||||||
|
|
||||||
|
global user, mdp
|
||||||
|
user = user_bypass
|
||||||
|
mdp = mdp_bypass
|
||||||
|
try:
|
||||||
|
con = psycopg2.connect("host=" + host + " port=" + port + " dbname=" + dbtype + " user=" + user + " password=" + mdp)
|
||||||
|
cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
|
||||||
|
except psycopg2.OperationalError:
|
||||||
|
print('password authentication failed')
|
||||||
|
user = user_save
|
||||||
|
mdp = mdp_save
|
||||||
|
|
||||||
|
else:
|
||||||
|
if user != user_save or mdp != mdp_save:
|
||||||
|
user = user_save
|
||||||
|
mdp = mdp_save
|
||||||
|
|
||||||
|
if (self.tableWidget_2.item(row, 1).background().color().rgba() != color_rgba_db) and (self.QMBquestionNoLogin != QMessageBox.StandardButton(0x00004000)):
|
||||||
# supression de la partie de l'url après le point d'interrogation
|
# supression de la partie de l'url après le point d'interrogation
|
||||||
if dbtype == sigdb:
|
if dbtype == sigdb:
|
||||||
code = self.tableWidget_2.item(row, 1).text()
|
code = self.tableWidget_2.item(row, 1).text()
|
||||||
@ -652,6 +689,7 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
|
|
||||||
# Détection du type de géométrie
|
# Détection du type de géométrie
|
||||||
geom_type = 'SELECT right(st_geometrytype(geom),-3) as a FROM ' + schema + '.' + table + ' GROUP BY a'
|
geom_type = 'SELECT right(st_geometrytype(geom),-3) as a FROM ' + schema + '.' + table + ' GROUP BY a'
|
||||||
|
try:
|
||||||
cur.execute(geom_type)
|
cur.execute(geom_type)
|
||||||
list_typegeom = cur.fetchall()
|
list_typegeom = cur.fetchall()
|
||||||
if len(list_typegeom) > 1:
|
if len(list_typegeom) > 1:
|
||||||
@ -677,7 +715,15 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
layer = QgsVectorLayer(uri.uri(), table, "postgres")
|
layer = QgsVectorLayer(uri.uri(), table, "postgres")
|
||||||
# Ajout de la couche au canevas QGIS
|
# Ajout de la couche au canevas QGIS
|
||||||
QgsProject.instance().addMapLayer(layer)
|
QgsProject.instance().addMapLayer(layer)
|
||||||
|
except psycopg2.errors.UndefinedTable:
|
||||||
|
print('Table not exist... RollBack !')
|
||||||
|
con.rollback()
|
||||||
|
except psycopg2.errors.InsufficientPrivilege:
|
||||||
|
print('Insufficient Privilege... RollBack !')
|
||||||
|
con.rollback()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
if self.QMBquestionNoLogin != QMessageBox.StandardButton(0x00004000):
|
||||||
self.QMBquestion = QMessageBox.question(iface.mainWindow(), u"Attention !", "La couche «" + str(self.tableWidget_2.item(row, 1).text()) + ' ' + str(self.tableWidget_2.item(row, 2).text()) + "» ne ce trouve pas dans cette BD !", QMessageBox.StandardButton(0x00004000))
|
self.QMBquestion = QMessageBox.question(iface.mainWindow(), u"Attention !", "La couche «" + str(self.tableWidget_2.item(row, 1).text()) + ' ' + str(self.tableWidget_2.item(row, 2).text()) + "» ne ce trouve pas dans cette BD !", QMessageBox.StandardButton(0x00004000))
|
||||||
|
|
||||||
def combobox_custom(self):
|
def combobox_custom(self):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user