[consulting] Restricting nodes to a certain role with nodeaccess
Brian Vuyk
brian at brianvuyk.com
Thu Oct 8 15:43:11 UTC 2009
Hi all.
For a client project, we are creating nodes programmatically as we
import them from an external system. We are using nodeaccess
(http://drupal.org/project/nodeaccess) to restrict access on a per-node
basis to the author (who can view, edit, and delete) and anyone from a
certain role (who may just view and edit, not delete).
On import, we are writing entries to both the nodeaccess and node_access
tables:
//Delete any existing grants, and add author and role grants
(nodeaccess module).
db_query("DELETE FROM {nodeaccess} WHERE nid = %d", $nid);
db_query("INSERT INTO {nodeaccess} (nid, gid, realm, grant_view,
grant_update, grant_delete)
VALUES
(%d, %d, 'nodeaccess_author', 1, 1, 1),
(%d, 12, 'nodeaccess_rid', 1, 1, 0)", $nid, $uid, $nid);
// Delete any existing grants, and add author and role grants (Core
node_access system).
db_query("DELETE FROM {node_access} WHERE nid = %d", $nid);
db_query("INSERT INTO {node_access} (nid, gid, realm, grant_view,
grant_update, grant_delete)
VALUES
(%d, $d, 'nodeaccess_author', 1, 1, 1),
(%d, 12, 'nodeaccess_rid', 1, 1, 0)", $nid, $uid, $nid);
This results in the following grants:
mysql> select * from nodeaccess where nid = 1261;
+------+-----+-------------------+------------+--------------+--------------+
| nid | gid | realm | grant_view | grant_update |
grant_delete |
+------+-----+-------------------+------------+--------------+--------------+
| 1261 | 12 | nodeaccess_rid | 1 | 1
| 0 |
| 1261 | 18 | nodeaccess_author | 1 | 1
| 1 |
+------+-----+-------------------+------------+--------------+--------------+
2 rows in set (0.00 sec)
mysql> select * from node_access where nid = 1261;
+------+-----+-------------------+------------+--------------+--------------+
| nid | gid | realm | grant_view | grant_update |
grant_delete |
+------+-----+-------------------+------------+--------------+--------------+
| 1261 | 12 | nodeaccess_rid | 1 | 1
| 0 |
| 1261 | 18 | nodeaccess_author | 1 | 1
| 1 |
+------+-----+-------------------+------------+--------------+--------------+
2 rows in set (0.00 sec)
The author grants seem to work - the author can do what he needs to do
(view, edit, and alter). However, users with rid 12 are supposed to be
able to view and edit as well, and they get an access denied when they
try to access the node.
What am I doing wrong here?
Thanks in advance for any help!
Brian
More information about the consulting
mailing list