views:

108

answers:

2

Drupal 6.x

I have this module that manages four different content types. For that matter, how do I define permission for each content within the same module? Is that even possible? I can't figure out how to define permission for each content type cuz hook_perm has to be named with module name and it doesn't have any argument(like hook_access $node) to return permission base on content type. Here's how I'd like to do -

function mymodule_perm() 
{
if(content1)    
return array(
    'create content1 node',
    'edit content1 nodes',
    'delete content1 nodes',
);
if(content2)    
return array(
    'create content2 node',
    'edit content2 nodes',
    'delete content2 nodes',
);
if(content3)    
return array(
    'create content3 node',
    'edit content3 nodes',
    'delete content3 nodes',
);
.......
}

Any help would be highly appreciated.

+5  A: 

Normally you do not need to create permissions for content types yourself, as the node module does this for you in node_perm(). For every content type you declare in hook_node_info(), the node module will automatically create a fixed set of permissions as follows:

  $perms[] = 'create '. $name .' content';
  $perms[] = 'delete own '. $name .' content';
  $perms[] = 'delete any '. $name .' content';
  $perms[] = 'edit own '. $name .' content';
  $perms[] = 'edit any '. $name .' content';

Besides that, you can declare any number of additional permissions in your modules hook_perm() implementation (as long as they are unique) and use those in your code as you wish.

The important thing here is that a permission does not do much by itself - it is just a name that will show up on the permissions page, allowing it to be attributed to roles. They only become 'meaningful' by code that uses them via user_access() calls.

So if, for example, you wanted to create a special, new permission for each of your content types yourself, you would just declare them in hook_perm() all at once (so you do not need any argument - just return one string per permission you'd like to create).

Henrik Opel
How did I miss permission strings for each content can be returned as strings as whole! Thanks a bunch.
Andrew
+1  A: 

Generally speaking, a module implementing more than one content type will return all the permissions it defines from hook_perm(); there isn't a way to know for which content type Drupal is asking the implemented permissions. Drupal always asks to the modules the list of all the implemented permissions.

kiamlaluno
Ya there's no way to know that cuz hook_perm doesn't have any argument like other hooks to know for what node, permission is being asked.
Andrew