1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
| /* l'énumération sympa :D */
enum eRank
{
rNoUser = 0, // l'authentification a éhcoué
rUser, // l'utlisateur "simple"
rOperator, // l'opérateur, non administrateur
rAdministrator // l'administrateur, le "dieu" du système :D
};
class UnIdentifiedUser// un utilisateur simple, non identifié
{
public:
UnIdentifiedUser(){}
virtual eRank rank() const {return rUser;}
virtual QString const & login() const{return "not logged in";}
/* éventuellement, on peut s'intéresser à certains
* privilèges
*/
virtual bool canHaveCatalog() const
{
/* même un utilisateur non identifé peut accéder au catalogue
*/
return true;
}
virtual bool canPassCommand() const
{
/* il faut être identifié pour passer une commande */
return false;
}
virtual bool canHaveInventory() const
{
/* il faut "faire partie du staff" pour accéder à l'inventaire */
return false;
}
virtual bool canChangRank() const
{
/* seul l'administrateur peut changer le rang d'un utilisateur*/
return false;
}
};
/* un utilisateur identifié est un utilisateur particulier en cela qu'on
* dispose de son login, et qu'il a "plus de droits" qu'un utilisateur
* non identifié
*/
class User : public UnIdentifiedUser
{
public:
UnIdentifiedUser(QString const & l):login_(l){}
/* on redéfini uniquement les comportements qui changent
*/
virtual eRank rank() const {return rUser;}
virtual QString const & login() const{return login_;}
virtual bool canPassCommand() const
{
/* un utilisateur identifié peut passer une commande */
return true;
}
/* par contre, l'accès au catalogue ou la possibilité de changer
* le rang d'un utilisateur lui sont refusés...
* les comportements définis pour UnIdentifiedUser restent donc
* valables
*/
private:
QString login_; // la seule information réellement intéressante :D
};
/* un opérateur est... un utilisateur "normal" avec quelques privilèges
* supplémentaires.
* il peut, par exemple, accéder à l'inventaire du stock
*/
class Operator: public User
{
public:
Operator(QString const & l):User(l){}
/* on redéfini uniquement les comportements qui changent
*/
virtual eRank rank() const {return rOperator;}
virtual bool canHaveInventory() const
{
return true;
}
};
/* enfin, l'administrateur est... un opérateur qui a encore plus
* de privilèges (entre autres, ceux de changer le rang des
* utilisateurs)
*/
class Administrator: public Operator{
public:
Administrator(QString const & l):Operator(l){}
/* on redéfini uniquement les comportements qui changent
*/
virtual eRank rank() const {return rAdministrator;}
virtual bool canChangRank() const
{
return true;
}
}; |
Partager