drupaldrupal-hooksdrupal-permissionsdrupal-content-types

Hook perm for more than one content type


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.


Solution

  • 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).