If you are using custom user, you can write methods which return booleans and which can be seen by the template.
I wrote aasmall utility method is_member(groupname) which returns the boolean.
I make liberal use of groups which work very well for me. In my custom user I can easily add a method to test whether that user is a member of that group.
On the question in your subject line about permissions, I refuse to contemplate individual permissions. I will ALWAYS use group permissions and name my groups to represent roles. Much more understandable by users (and me) and much much much more manageable than individual permissions.
Ymmv
Mike
--
(Unsigned mail from my phone)