def photo_is_addable(role_related_obj, associated_model): ''' photo_is_addable(role_related_obj, associated_model) returns True if a user possessing role_related_obj can add a photo to the associated_model, False otherwise. role_related_obj may be a role or an instance user. associated_model may be a model class or instance of a model. ''' AssociatedClass = _get_associated_model_class(associated_model) PhotoClass = TreePhoto if AssociatedClass == Tree else MapFeaturePhoto codename = Role.permission_codename(AssociatedClass, 'add', photo=True) role = _get_role_from_related_object(role_related_obj) return role and role.has_permission(codename, PhotoClass) or False