Index: modules/blog/blog.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/blog/blog.module,v
retrieving revision 1.285
diff -u -p -r1.285 blog.module
--- modules/blog/blog.module	12 Aug 2007 15:55:35 -0000	1.285
+++ modules/blog/blog.module	25 Aug 2007 21:19:23 -0000
@@ -29,15 +29,13 @@ function blog_perm() {
 /**
  * Implementation of hook_access().
  */
-function blog_access($op, $node) {
-  global $user;
-
+function blog_access($op, $node, $account) {
   if ($op == 'create') {
-    return user_access('edit own blog') && $user->uid;
+    return user_access('edit own blog', $account) && $account->uid;
   }
 
   if ($op == 'update' || $op == 'delete') {
-    if (user_access('edit own blog') && ($user->uid == $node->uid)) {
+    if (user_access('edit own blog', $account) && ($node->uid == $account->uid)) {
       return TRUE;
     }
   }
Index: modules/forum/forum.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/forum/forum.module,v
retrieving revision 1.413
diff -u -p -r1.413 forum.module
--- modules/forum/forum.module	12 Aug 2007 15:55:36 -0000	1.413
+++ modules/forum/forum.module	25 Aug 2007 21:19:23 -0000
@@ -268,15 +268,13 @@ function forum_node_info() {
 /**
  * Implementation of hook_access().
  */
-function forum_access($op, $node) {
-  global $user;
-
+function forum_access($op, $node, $account) {
   if ($op == 'create') {
-    return user_access('create forum topics');
+    return user_access('create forum topics', $account);
   }
 
   if ($op == 'update' || $op == 'delete') {
-    if (user_access('edit own forum topics') && ($user->uid == $node->uid)) {
+    if (user_access('edit own forum topics', $account) && ($account->uid == $node->uid)) {
       return TRUE;
     }
   }
Index: modules/node/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.module,v
retrieving revision 1.873
diff -u -p -r1.873 node.module
--- modules/node/node.module	25 Aug 2007 09:25:48 -0000	1.873
+++ modules/node/node.module	25 Aug 2007 21:19:24 -0000
@@ -1822,10 +1822,13 @@ function node_search_validate($form, &$f
  * @param $node
  *   The node object (or node array) on which the operation is to be performed,
  *   or node type (e.g. 'forum') for "create" operation.
+ * @param $uid
+ *   Optional, The user ID by which the operation is to be performed. Used when
+ *   determining access rights to a node for a user other than the current user.
  * @return
  *   TRUE if the operation may be performed.
  */
-function node_access($op, $node) {
+function node_access($op, $node, $uid = NULL) {
   global $user;
 
   if (!$node) {
@@ -1835,16 +1838,17 @@ function node_access($op, $node) {
   if ($op != 'create') {
     $node = (object)$node;
   }
+  $account = isset($uid) ? user_load(array('uid' => $uid)) : $GLOBALS['user'];
   // If the node is in a restricted format, disallow editing.
   if ($op == 'update' && !filter_access($node->format)) {
     return FALSE;
   }
 
-  if (user_access('administer nodes')) {
+  if (user_access('administer nodes', $account)) {
     return TRUE;
   }
 
-  if (!user_access('access content')) {
+  if (!user_access('access content', $account)) {
     return FALSE;
   }
 
@@ -1854,7 +1858,7 @@ function node_access($op, $node) {
   if ($module == 'node') {
     $module = 'node_content'; // Avoid function name collisions.
   }
-  $access = module_invoke($module, 'access', $op, $node);
+  $access = module_invoke($module, 'access', $op, $node, $account);
   if (!is_null($access)) {
     return $access;
   }
@@ -2120,18 +2124,19 @@ function node_access_rebuild() {
  */
 
 /**
- * Implementation of hook_access().
+ * Implementation of hook_access(). This has a nonstandard name in order
+ * not to conflict with unrelated node_access()
  */
-function node_content_access($op, $node) {
+function node_content_access($op, $node, $account) {
   global $user;
   $type = is_string($node) ? $node : (is_array($node) ? $node['type'] : $node->type);
 
   if ($op == 'create') {
-    return user_access('create '. $type .' content');
+    return user_access('create '. $type .' content', $account);
   }
 
   if ($op == 'update') {
-    if (user_access('edit '. $type .' content') || (user_access('edit own '. $type .' content') && ($user->uid == $node->uid))) {
+    if (user_access('edit '. $type .' content', $account) || (user_access('edit own '. $type .' content', $account) && ($user->uid == $node->uid))) {
       return TRUE;
     }
   }
Index: modules/poll/poll.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/poll/poll.module,v
retrieving revision 1.238
diff -u -p -r1.238 poll.module
--- modules/poll/poll.module	25 Aug 2007 09:25:49 -0000	1.238
+++ modules/poll/poll.module	25 Aug 2007 21:19:24 -0000
@@ -57,9 +57,9 @@ function poll_perm() {
 /**
  * Implementation of hook_access().
  */
-function poll_access($op, $node) {
+function poll_access($op, $node, $account) {
   if ($op == 'create') {
-    return user_access('create polls');
+    return user_access('create polls', $account);
   }
 }
 
