                     resourceID = managedObject.valueForKey(self.resourceIDAttributeName) as? Int
                 })
                 
-                // permission to view resource
-                
-                
-            }
-        }
-        
-        return (ServerResponse(statusCode: ServerStatusCode.BadRequest, JSONResponse: ""), [ServerUserInfoKey.ResourceID:0])
+                // permission to view resource (must have at least readonly access)
+                
+                if (self.delegate?.server(self, permissionForRequest: request, managedObject: managedObject, context: context, key: nil).toRaw() >= ServerPermission.ReadOnly.toRaw()) {
+                    
+                    // must have permission for keys accessed
+                    if predicateKey != nil {
+                        
+                        if (self.delegate?.server(self, permissionForRequest: request, managedObject: managedObject, context: context, key: predicateKey).toRaw() >= ServerPermission.ReadOnly.toRaw()) {
+                            
+                            break
+                        }
+                    }
+                    
+                    // must have read only permission for keys in sort descriptor
+                    if !sortDescriptors.isEmpty {
+                        
+                        for sort in sortDescriptors {
+                            
+                            if (self.delegate?.server(self, permissionForRequest: request, managedObject: managedObject, context: context, key:sort.key).toRaw() >= ServerPermission.ReadOnly.toRaw()) {
+                                
+                                filteredResults.append(managedObject)
+                            }
+                        }
+                    }
+                    else {
+                        
+                        filteredResults.append(managedObject)
+                    }
+                }
+            }
+            
+            results = filteredResults
+        }
+        
+        // return the resource IDs of objects mapped to their resource path
+        
+        var jsonResponse = [[String: String]]()
+        
+        context.performBlockAndWait { () -> Void in
+            
+            for managedObject in results! {
+                
+                // get the resourcePath for the entity
+                
+                let resourcePath = (self.entitiesByResourcePath as NSDictionary).allKeysForObject(managedObject.entity).first as? String
+                
+                let resourceID = managedObject.valueForKey(self.resourceIDAttributeName) as? String
+                
+                jsonResponse.append([resourceID!: resourcePath!])
+            }
+        }
+        
+        let response = ServerResponse(statusCode: ServerStatusCode.OK, JSONResponse: jsonResponse)
+        
+        return (response, userInfo)
     }
     
     private func responseForCreateRequest(request: ServerRequest) -> (ServerResponse, [ServerUserInfoKey: AnyObject]) {

        }
        
        // optionally filter results
        if self.permissionsEnabled {
            
            var filteredResults = [NSManagedObject]()


/** Server Permission Enumeration */

public enum ServerPermission: Int, Equatable {
    
    /**  No access permission */
    case NoAccess = 0
    
    /**  Read Only permission */
    case ReadOnly = 1
    
    /**  Read and Write permission */
    case EditPermission = 2
}

/** Server Request Type */
