Hook perm for more than one content type

青春壹個敷衍的年華 提交于 2019-12-13 02:21:10

问题


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.


回答1:


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




回答2:


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.



来源:https://stackoverflow.com/questions/3026312/hook-perm-for-more-than-one-content-type

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!