def visible(self):
        """
        Join viewlet is shown if:
        * In a 'self-join' workspace
        * User is not already a member
        """
        if not self.in_workspace():
            return False

        if not self.context.join_policy == "self":
            return False

        user = api.user.get_current()
        workspace = IWorkspace(self.context.acquire_workspace())
        if user.getUserName() in workspace.members:
            return False

        return True
Join viewlet is shown if:
        * In a 'self-join' workspace
        * User is not already a member