Add read-only user option

I've changed a bunch of stuff. Using a class decorator instead of a plain function for checking if the user is authorized or not and so forth.

Rebased it all onto dosomders patch (kind of ugly to do that kind of rebasing) but it keeps it down to one commit and credit still goes to dosomder ;)