diff -r a42c276d42ba restws.entity.inc
--- a/restws.entity.inc	Mon Sep 30 22:35:25 2013 -0400
+++ b/restws.entity.inc	Mon Sep 30 23:23:03 2013 -0400
@@ -70,16 +70,12 @@
   public function delete($id);
 
   /**
-   * Determines access for a given operation and resource.
+   * Determines access for a given request.
    *
-   * @param string $op
-   *   Either 'create', 'view' (= read), 'update' or 'delete'.
-   * @param int|string $id
-   *   The id of the resource.
-   *
-   * @see entity_access()
+   * @param array $request
+   *   The request details.
    */
-  public function access($op, $id);
+  public function access(array $request);
 
   /**
    * Returns the name of the resource.
@@ -331,13 +327,51 @@
     }
   }
 
-  public function access($op, $id) {
-    return entity_access($op, $this->entityType, isset($id) ? $this->wrapper($id)->value() : NULL);
+  public function access(array $request) {
+    $op = $request['op'];
+    $id = $request['id'];
+
+    if (!empty($id)) {
+      $entity = $this->wrapper($id)->value();
+    } else {
+      $entity = $this->createBlankEntityFromRequest($request);
+    }
+    
+    return entity_access($op, $this->entityType, $entity);
   }
 
   public function resource() {
     return $this->entityType;
   }
+  
+  /**
+   * Creates a new blank entity object that, based on information decoded
+   * from the incoming request, should contain sufficient information for
+   * security checks and other logic to pass if the user has access to
+   * create that type of entity bundle.
+   * 
+   * @param array $request
+   *   The request info.
+   *   
+   * @return stdClass
+   *   A blank class object that may contain a 'type' field, if the incoming
+   *   request specified a type.
+   */
+  protected function createBlankEntityFromRequest(array $request) {
+    $format             = $request['format'];
+    $resourceController = $request['resource'];
+    $payload            = $request['payload'];
+
+    $values = $format->unserialize($resourceController->propertyInfo(), $payload);
+    
+    $entity = new stdClass();
+    
+    if (isset($values['type'])) {
+      $entity->type = $values['type'];
+    }
+    
+    return $entity;
+  }
 
   /**
    * Helper function which takes care of distinguishing between fields and
diff -r a42c276d42ba restws.module
--- a/restws.module	Mon Sep 30 22:35:25 2013 -0400
+++ b/restws.module	Mon Sep 30 23:23:03 2013 -0400
@@ -129,7 +129,7 @@
     // Since there is no access callback for query we need to use view.
     $access_op = $op == 'query' ? 'view' : $op;
 
-    if (user_access('access resource ' . $resource_name) && $resource->access($access_op, $id)) {
+    if (user_access('access resource ' . $resource_name) && $resource->access($request)) {
       try {
         $method = $op . 'Resource';
         if ($op == 'create') {
