J'ai une authentification personnalisée que je mettrai dans la section code ci-dessous basée sur 2 tables, une table d'employés et une table d'employeurs. Lorsqu'un employeur se connecte, il peut voir ses coordonnées bancaires et une liste de tous les rapports des employés. Lorsqu'un employé se connecte, je veux que la page des coordonnées bancaires de l'employeur soit masquée et que la liste de toutes les pages des employés soit également masquée et je veux que la page des détails de l'employé soit affichée à la place. Je ne sais pas du tout comment faire cela. La chose la plus proche que j'ai trouvée était un schéma d'autorisation personnalisé, mais qui exigeait que l'administrateur de la base de données doive accorder manuellement des autorisations aux utilisateurs.
Une note clé) En tant qu'administrateur de la base de données, je ne veux pas avoir à accorder manuellement des autorisations à certains utilisateurs. Les employeurs et les employés créeront leur propre compte et selon qu'ils sont un employeur ou un employé (ce que devrait faire le système d'authentification), les pages appropriées doivent être affichées. (Donc oui, un employé pourrait mentir sur le fait d'être un employeur lors de la création d'un compte, mais ignorez cela)
Autre note) Veuillez ignorer le fait que les mots de passe sont stockés en texte brut, c'est un problème de devoir et le cryptage a pas encore appris.
function authenticate( p_username varchar2, p_password varchar2 ) return boolean is begin return( Table1Authenticate( p_username, p_password ) or Table2Authenticate( p_username, p_password ) ); end; create or replace function Table1Authenticate( p_username varchar2, p_password varchar2 ) return boolean is i integer; begin select 1 into i from employer where upper(employer.username) = upper(p_username) and upper(employer.passwords) = upper(p_password); return( true ); exception when NO_DATA_FOUND then return( false ); end; create or replace function Table2Authenticate( p_username varchar2, p_password varchar2 ) return boolean is i integer; begin select 1 into i from employee where upper(employee.username) = upper(p_username) and upper(employee.password) = upper(p_password); return( true ); exception when NO_DATA_FOUND then return( false ); end;
3 Réponses :
Je pense que vous serez peut-être mieux servi si l'authentification que vous effectuez déclenche une action dynamique, qui masque ensuite le tableau des coordonnées bancaires de l'employeur. Peut-être avez-vous la valeur d'authentification définie sur un élément masqué (employeur ou employé) et définissez une action dynamique en fonction de la valeur de l'élément. Pour être un peu plus sûr, définissez l'action dynamique sur si employeur, true: afficher les coordonnées bancaires de l'employeur de la table, false: masquer les coordonnées bancaires de l'employeur de la table et ne faire exécuter que la fausse action au chargement. Nous espérons que cela fonctionnera
EDIT: Merde, je n'avais pas lu la question assez bien je suppose. Je pensais que vous vouliez des tableaux sur une seule page. Alors tant pis
N'utilisez pas d'actions dynamiques pour sécuriser les composants sur une page, sinon ces actions peuvent être annulées à l'aide d'outils basés sur le navigateur sur le client. Utilisez plutôt les conditions côté serveur ou attribuez un schéma d'autorisation.
Dans Oracle Apex, vous pouvez restreindre l'accès à la page à l'aide de Page> Sécurité> Schéma d'autorisation
. Vous pouvez créer une fonction personnalisée renvoyant un booléen en tant que schéma d'autorisation personnalisé dans les composants partagés> schémas d'autorisation
et utilisé dans les pages requises. J'espère que cela vous aidera.
Salut, je ne sais pas comment créer une fonction retournant un booléen pour cela, car j'ai copié le schéma d'authentification que j'ai ci-dessus sur un site Web et l'ai changé pour l'adapter à ma table. J'ai également essayé de créer une autorisation existante, mais il semble que cela permet toujours aux employés de cliquer sur une page d'employeur, mais ils obtiendront une fenêtre d'erreur qui les empêchera d'accéder à cette page. Au lieu de cela, je veux que la page entière soit cachée dans la barre de navigation afin qu'ils ne puissent même pas la voir ou cliquer dessus.
Salut, maintenant votre exigence est claire. Pour masquer l'employeur / l'employé de la barre de navigation, accédez à Composants partagés> Liste de la barre de navigation> Sélectionner une entrée de liste> Conditions
et vous pouvez sélectionner les conditions selon vos besoins et saisir l'action à effectuer dans Expression1
. Par exemple, vous pouvez sélectionner PLSQL Function Returning boolean
comme condition et copier votre fonction dans Expression 1
. Donc, sur la base du retour booléen, Menu apparaîtra / disparaîtra. J'espère que cela t'aides.
Comme indiqué de la même manière dans la réponse à cette question similaire , vous définiriez des pages appropriées à chaque type d'utilisateur, et protégeriez ces pages et les liens vers eux à l'aide de schémas d'autorisation.
Vous pouvez autoriser les utilisateurs à gérer un ensemble d'enregistrements qui détermine le type d'accès dont dispose chaque utilisateur et restreindre l'accès à cette page en conséquence. De cette façon, le DBA peut rester concentré sur le fait de garder la rotation difficile (c'est une blague).
Ce n'est pas un problème d'authentification. C'est une question de privilèges, une fois que vous y êtes.
Analogie: puis-je me connecter à ma banque? Sûr. Que puis-je faire une fois sur place - uniquement ce que tout client peut faire, avec uniquement ses comptes. C'est respectivement l'authentification, les privilèges et la sécurité au niveau des lignes en action.