from Role import Role


class HierRole(Role):
    """
    HierRole is a hierarchical role. It points to its parent roles.
    The hierarchy cannot have cycles.
    """

    def __init__(self, name, description=None, superRoles=[]):
        Role.__init__(self, name, description)
        for role in superRoles:
            assert isinstance(role, Role)
        self._superRoles = superRoles[:]

    def playsRole(self, role):
        """
        Returns 1 if the receiving role plays the role that is passed in. This
        implementation provides for the inheritance that HierRole supports.
        """
        if self == role:
            return 1
        for superRole in self._superRoles:
            if superRole.playsRole(role):
                return 1
        return 0