Personnellement ce que je fais :
une page de connexion, avec un formulaire login/password.
Si les données sont critiques, cette page doit être servie via https.
Coté serveur, on vérifie que le login et le mot de passe crypté sont valides, en récupérant les droits de l'utilisateur en BDD.
Si valide, le login et les droits sont stockés dans une Session qu'on démarre, sinon retour à la page de connexion.
Le mot de passe n'a pas besoin d'être stocké dans la session

.
Pour chaque page (ou contenu particulier d'une page), on peut agir en fonction des droits stocké en session.
Si aucun droit n'est disponible, ou le login, redirection page de connexion.
Bref tu peux réfléchir en terme de "groupe" si tu le souhaites, à toi de faire ta sauce sur ton modèle au niveau des utilisateurs.
Personnellement çà se résume à une liste de droits pour chaque utilisateur.