from AccessControl.PermissionRole import rolesForPermissionOn

from Products.CMFCore.utils import _mergedLocalRoles
from Products.CMFCore.CatalogTool import IndexableObjectWrapper
from Products.CMFCore.CMFCorePermissions import ModifyPortalContent


def allowedToModifyRolesAndUsers(self):
    """
        Return a list of roles and users with View permission.
        Used by PortalCatalog to filter out items you're not allowed to see.
    """
    ob = self._IndexableObjectWrapper__ob
    allowed = {}
    for r in rolesForPermissionOn(ModifyPortalContent, ob):
        allowed[r] = 1
    localroles = _mergedLocalRoles(ob)
    for user, roles in localroles.items():
        for role in roles:
            if allowed.has_key(role):
                allowed['user:' + user] = 1
    
    if allowed.has_key('Owner'):
        del allowed['Owner']
    return list(allowed.keys())


IndexableObjectWrapper.allowedToModifyRolesAndUsers = allowedToModifyRolesAndUsers
