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

Dries drupal-devel at drupal.org
Thu Mar 3 12:11:48 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:   Dries
 Status:       patch

Whatever we choose to do, the current patch does not improve
consistentcy.  Just look at the existing code to clear the menu cache,
and unify it into one function.


Previous comments:

December 31, 2004 - 20: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 - 19: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 - 21:01 : Anonymous

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


January 27, 2005 - 21:05 : JonBob

Yes, the patch does that.


January 27, 2005 - 23: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.)


March 2, 2005 - 23:59 : JonBob

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.

More information about the drupal-devel mailing list