Drupal 6 рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐

рдореИрдВ Drupal Commons рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред ToR рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХреБрдЫ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкрд╣реБрдВрдЪ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛:


рдЗрд╕рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдореИрдВрдиреЗ рдЗрд╕реЗ hook_node_grants рдФрд░ hook_node_access_records рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдмреЛрдЭрд┐рд▓, рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рдФрд░ рдХрдЪрд░рд╛ рд╣реИред

рдФрд░ рд╡рд╣ рджреВрд╕рд░реЗ рд░рд╛рд╕реНрддреЗ рд╕реЗ рдЧрдпрд╛ред

рдореЗрдиреВ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЛ рдпрд╛рдж рдХрд░реЗрдВред рддрддреНрд╡ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╕рд░рдгреА рдореЗрдВ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ: access callback рдФрд░ access arguments ред рдЖрдЗрдП рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП access callback рдХреЛ access arguments рдореЗрдВ рдЕрдВрддрд┐рдо рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ:

 // MYMODULE_menu_alter        function MYMODULE_menu_alter(&$items) { foreach ($items as &$item) { if (!isset($item['access arguments'])) { $item['access arguments'] = array(); } if (isset($item['access callback'])) { //  callback,    . $item['access arguments'][] = $item['access callback']; } else { // callback  ,   , Drupal 6 //  user_access() if (!empty($item['access arguments'])) { $item['access arguments'][] = 'user_access'; } else { //     -  -   $item['access arguments'][] = TRUE; } } //  callback $item['access callback'] = 'MYMODULE_access_callback'; } } 


рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдмреЗрдирд╛рдореА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд╡рдЬрди рдмрд╣реБрдд рдмрдбрд╝рд╛ рдХрд┐рдпрд╛ (рдпрд╛рдиреА, рдореЗрд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХреЛрдИ рднреА рдореЗрдиреВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛)ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрд▓рдЧ рд╕реНрдерд┐рддрд┐ рд╣реИ, рддреЛ рдЕрдкрдиреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 $item['default access callback'] = $item['access callback']; 

рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд╛рдж рдореЗрдВ рдЕрд▓рд░реНрдЯ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╛рдиреА рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡рдЬрди рдХреЛ рдмрдбрд╝рд╛ рд╕реЗрдЯ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рдЕрдм рдЦреБрдж рдХреЙрд▓рдмреИрдХ:

 function MYMODULE_access_callback() { $args = func_get_args(); //  ,     TRUE, FALSE     //  ,    if (count($args) == 1) { if (is_bool($args[0])) { return $args[0]; } return $args[0](); } // callback -    $callback = $args[count($args) - 1]; $callback_args = array_slice($args, 0, count($args) - 1); //   : if (is_object($args[1]) && isset($args[1]->nid)) { //     //  ,        if (!call_user_func_array($callback, $callback_args)) { return FALSE; } // 3-  - ,    //.. node_access($op, $node, $account = NULL) if (is_object($args[2])) { $account = $args[2]; } else { global $user; $account = $user; } //   : if ($condition && some_rights()) { return TRUE; } else { return FALSE; } } //   if (!function_exists($callback)) { $dump = print_r($callback_args, TRUE); $msg = ' <b>Access callback  !</b><br /> Callback: "%callback"<br /> Callback arguments:<hr> <pre> %args </pre> '; $vars = array( '%callback' => $callback, '%args' => $callback_args ); watchdog('php', $msg, $vars, WATCHDOG_ERROR); return TRUE; } //    return call_user_func_array($callback, $callback_args); } 


рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдХрд╛рдлреА рдЖрд░рд╛рдорджрд╛рдпрдХ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд╢рд╛рдпрдж рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

Source: https://habr.com/ru/post/In144687/


All Articles