I have a private group with a "notebook"...most pages of that notebook may be accessed by all members of that group, but some pages shouldn't. I tried to control access with the module "Content access" but that only works with node types that are not part of any group because organic groups seems to grant access to all nodes if the user belongs to that group. Is there a way to deny access (based on roles) to nodes that belong to a group if the user is in the group?
2 Answers
Install the Module Grants module. It will solve the conflict. Actually, it will take the conflict into account, which Drupal does not.
Module Grants makes modules that deal with content access permissions operate better on unpublished (as well as published) content. It also makes sure that access grants behave in an orderly fashion when such modules are used together.
You can use the hook_node_access function for this. You can build an array of all your nodes and check this every time a user (linked with his role) access a node. You can allow, deny or ignore the request.
If you can't figure it out yourself, provide me with some info and I'll make you an example.
-
That hook is D7 only and the D6 equivalent "hook_access" doesn't seem to get called - not even from the atrium_book feature module... Commented Jan 23, 2012 at 14:47
-
I'm sorry, I didn't saw the
6
-tag! Why do you thing thehook_access
isn't being called?– MichielCommented Jan 23, 2012 at 15:00 -
I added the hook to the atrium_book feature (atrium_book.module) with a simple dpm("foo") and nothing happens when I view a book node (I cleared the cache and I tried it with a non-user1 account) Commented Jan 23, 2012 at 15:08
-
2@PhilippHorn it is not a good idea to edit core or contributed modules. It would be better to create a new module in which to call your own hooks and extend the functionality of other modules. That way you can still easily upgrade contributed modules. Commented Jan 23, 2012 at 15:14
-