    """The RoleUserManager mixin."""

    from RoleUser import RoleUser
    from Role import Role
    from MiscUtils import NoDefault

    class RoleUserManagerMixIn(object):
        """Mixin class for mapping names to roles.

        This mixin adds the functionality of keeping a dictionary mapping
        names to role instances. Several accessor methods are provided for this.

        """

        ## Init ##

        def __init__(self):
            self._roles = {}
            self.initUserClass()

        def initUserClass(self):
            """Invoked by __init__ to set the default user class to RoleUser."""
            self.setUserClass(RoleUser)

        ## Roles ##

        def addRole(self, role):
            assert isinstance(role, Role)
            name = role.name()
            assert name not in self._roles
            self._roles[name] = role

        def role(self, name, default=NoDefault):
            if default is NoDefault:
                return self._roles[name]
            else:
                return self._roles.get(name, default)

        def hasRole(self, name):
            return name in self._roles

        def delRole(self, name):
            del self._roles[name]

        def roles(self):
            return self._roles

        def clearRoles(self):
            self._roles = {}