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

    class RoleUserManagerMixIn:
        """
        RoleUserManagerMixIn 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 not self._roles.has_key(name)
            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 self._roles.has_key(name)

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

        def roles(self):
            return self._roles

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