user/%/edit access permission

kornilk képe

Sziasztok,

D7-ben szeretnék külön engedélyt állítani, hogy ki szerkeszthesse saját accountját. Ezt egy modulba így írtam meg, de valamiért nem működik, sosincs enegedély ha bekapcsolom a modult.

Hol hibázok? Köszönöm.

  1. function enkicsimodulom_menu_alter(&$items) {
  2. $items['user/%/edit']['access arguments'] = array('access user edit');
  3. }
  4.  
  5. function enkicsimodulom_permission() {
  6. return array(
  7. 'access user edit' => array(
  8. 'title' => t('user/%/edit oldal elérése'),
  9. 'description' => t('Engedély, a user/%/edit odlal eléréséhez.'),
  10. ),
  11. );
  12. }
Taxonomy upgrade extras: 
Drupal verzió: 
Sk8erPeter képe

dehát ez így abszolút rossz :D

kiírattad teszt céljából az $items['user/%user/edit'] tömböt? Gondolom nem :)

előbb tanulmányozd ezt:
http://api.drupal.org/api/drupal/modules%21user%21user.module/function/u...

  1. $items['user/%user/edit'] = array(
  2. 'title' => 'Edit',
  3. 'page callback' => 'drupal_get_form',
  4. 'page arguments' => array('user_profile_form', 1),
  5. 'access callback' => 'user_edit_access',
  6. 'access arguments' => array(1),
  7. 'type' => MENU_LOCAL_TASK,
  8. 'file' => 'user.pages.inc',
  9. );

ezt a kódot előbb értsd meg.

Ne az access arguments kulcsot akard felülbírálni, hanem az access callback-et.

Tehát az alteredben az
$items['user/%user/edit']['access callback']
kulcsot változtasd meg, add hozzá a saját callback-edet.

A user_edit_access így néz ki:

http://api.drupal.org/api/drupal/modules%21user%21user.module/function/u...

  1. function user_edit_access($account) {
  2. return (($GLOBALS['user']->uid == $account->uid) || user_access('administer users')) && $account->uid > 0;
  3. }

Na, valami ilyesmit kreálj Te is, csak a saját feltételeidtől tedd függővé, kinek van joga a szerkesztéshez.

1
0
kornilk képe

Sikerült megoldanom, köszönöm a segítséget.

Azért megmutatom, biztonságos-e a megoldásom :)

  1. function enkicsitmodulom_menu_alter(&$items) {
  2. $items['user/%user/edit']['access callback'] = 'enkicsitmodulom_user_edit_access';
  3. }
  4.  
  5. function enkicsitmodulom_user_edit_access($account) {
  6. return ((($GLOBALS['user']->uid == $account->uid) && user_access('access user edit')) || user_access('administer users')) && $account->uid > 0;
  7. }
  8.  
  9. function enkicsitmodulom_permission() {
  10. return array(
  11. 'access user edit' => array(
  12. 'title' => t('user/%/edit oldal elérése'),
  13. 'description' => t('Engedély, a user/%/edit odlal eléréséhez.'),
  14. ),
  15. );
  16. }

Így alapjában hozzáfér a user administrátor mindenki profiljához, azonban a többiek csak akkor, ha van 'access user edit' joguk. Jól értelmeztem?

Köszönöm

0
0