[drupal-devel] [bug] Changing roles for a user requires menu cache invalidate

JonBob drupal-devel at drupal.org
Wed Mar 2 21:59:35 UTC 2005

Issue status update for http://drupal.org/node/14977

 Project:      Drupal
 Version:      cvs
 Component:    user.module
 Category:     bug reports
 Priority:     normal
 Assigned to:  Anonymous
 Reported by:  moshe weitzman
 Updated by:   JonBob
 Status:       patch

I guess I don't have a strong opinion on this. Calling menu_rebuild()
does the necessary cache clearing, but if this is deemed hard to
understand, then just clearing the cache may be sufficient. However, we
use menu_rebuild() in other places for this purpose; should those be
changed to a set of cache clears instead?
The difference between menu_rebuild() and just doing the cache clears
- menu_rebuild() fixes the menu for the current page request, not just
for future ones.
- menu_rebuild() populates the menu table with newly added
module-defined items.


Previous comments:

December 31, 2004 - 13:46 : moshe weitzman

When you remove a user from a given role, the effect is often not seen
for a long time since the user's menu remains in cache. we should
invaidate the menu cache for a user whenh is roles change (or anytime
the $user is saved?).
This same bug is apparent when you grant new roles to a user.


January 27, 2005 - 12:34 : JonBob

Attachment: http://drupal.org/files/issues/menu_18.patch (1.51 KB)

Fixed by adding ability to invalidate cache only for one user.


January 27, 2005 - 14:01 : Anonymous

Don't we also need some code in user.module to call menu_rebuild?


January 27, 2005 - 14:05 : JonBob

Yes, the patch does that.


January 27, 2005 - 16:54 : Dries

I think the user module needs more work (last two chunks added by me):
diff -r1.434 user.module
>   // Rebuild this user's menu to account for possibly changed
>   menu_rebuild($user->uid);
<         // Delete that user's menu cache.
<         cache_clear_all('menu:'. $account->uid);
<     cache_clear_all();
Please verify/update as necessary.  
(I, for one, wouldn't expect menu_rebuild() to flush the page cache.)

More information about the drupal-devel mailing list