There are now a few ways to achieve this kind of thing (until recently there was nothing!)
- Steve Meyers' Very Simple Permissions module. This has a Part which adds a checkbox allowing you to make content "private" so only logged in users can see it. Obviously that just handles a single case and can't really have any custom logic plugged in (although
you could use it as an example to write your own module with different logic)
- Piotr Szmyd's Content Authorization module. This does most of what you're after and has extensibility points so you can add your own logic.
- Mechanics - which you're already using - has a few ways it can be applied to filtering content. Firstly, any Sockets can be filtered when they're displayed. You can implement ISocketHandler (in the latest source) and use OnFiltering to add a filter object
into the context, which lets you filter the content using a Linq query. You can look at SequenceSocketEvents.cs to see how the sorting is applied over SequencePart; you can do the same to add any of your own filtering or sorting logic.
Then there's my Quanta module, which leverages Mechanics to create roles-based connectors, so it can define per-item permissions. It also has Groups which allow you to define content permissions for groups of users, which is exactly what you're asking for.
Unfortunately there's is currently no support for View permissions (due to them not existing in Orchard), only Edit/Delete, but I'll be getting around to this soon now it's possible in a couple of ways; and adding an ISocketHandler to perform view filtering
based on them.
Finally you asked about menus - the Cartography module (also in Science Project!) gives you a Mechanics-based menu system, where again you could apply ISocketHandler filters (and of course Quanta view permissions will get automatically applied once they're
So there are a lot of options, it just depends what granularity of control you need. For reference there are a few fairly lengthy discussions on this topic in general: