문제

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.

도움이 되었습니까?

해결책

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

다른 팁

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, which could not even be related to nodes; there are some modules that implement only permissions for their setting pages, for example.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top