2010-08-03 5 views
0

Je prévois d'utiliser deux tables (à savoir invité et employé) pour contrôler quelle page est disponible pour quel utilisateur.Contrôlez différents niveaux d'accès

L'utilisateur peut s'inscrire à un compte alors que l'employé ne le peut pas. Le compte d'un employé ne peut être attribué que par un administrateur système.

Voici la question que je viens de découvrir:

On suppose UserA est un employé et a « login001 » comme nom d'utilisateur et « password » comme mot de passe.

Maintenant, une supposition vient sur le site Web et applique un nom d'utilisateur avec 'login001' et 'mot de passe' comme mot de passe.

Ensuite, l'utilisateur peut accéder à certains sites Web internes car il a choisi le même nom d'utilisateur/mot de passe que l'un des employés.

Voici ma solution à ce problème:

méthode: A chaque fois qu'un nom d'utilisateur est appliqué (pas d'importance guess ou employé), le seront contrôlés guess table et employé pour vous assurer qu'il n'y a pas double .

Deuxième méthode: Combinez les tables guess et employee ensemble en tant que table de personnes. Cependant, pour guess, le type_utilisateur peut être affecté en tant que GUEST et pour employee, le type_utilisateur peut être affecté en tant que EMPLOYEE.

Je ne sais pas si les méthodes ci-dessus ont un sens ou non. Si ni l'un ni l'autre ne sont de bonnes solutions, donnez-moi une orientation afin que je puisse adopter une bonne pratique. Je n'utilise aucun framework ou OOP pour implémenter mon script PHP.

Merci

Répondre

2

Je vous recommande de combiner vos deux tables d'accréditation en 1. Vous pouvez ensuite créer une table guest et employee avec une référence à la table des informations d'identification. De cette façon, vous pouvez stocker des informations supplémentaires sur les deux. Toutefois, vous voudrez peut-être vous demander quelle est la différence entre un invité et un employé. Si la seule différence est le contrôle d'accès, vous pouvez être en mesure d'obtenir une colonne supplémentaire dans la table des informations d'identification qui définit si l'enregistrement est un enregistrement invité ou un enregistrement d'employé. Enfin, une fois que vous avez combiné vos informations d'identification dans 1 table, vous devez mettre une contrainte unique sur votre colonne de nom d'utilisateur. Cela garantira que seul un compte peut avoir un nom d'utilisateur comme login001 ou joeshmoe.

+0

Notez que la contrainte unique ne fonctionne que si vous stockez les invités et les employés dans la même table. – jmz

+0

@jmz - Oui, je devrais probablement préciser que l'ajout de la contrainte unique suppose qu'il y a 1 table d'identifiants. –

+0

Bonjour Jones, Sur la base de votre suggestion, je pense que le cadre de la table doit être le suivant code pseudo: PersonTable { person_id: varchar(20) primary key, credential: employee|guest } merci – q0987

1

Vous devriez probablement mettre toutes les connexions ensemble dans une table car ils vont partager beaucoup des mêmes colonnes. Ces colonnes dupliquées ne sont pas un moyen idéal pour atomiser vos données. Utilisez la méthode deux, cela réduira vos maux de tête plus tard et les données seront beaucoup plus faciles à comprendre.

Questions connexes