Я предпочитаю этот способ, он дает больше гибкости:
f(Command, UserId) ->
f(Command,is_registered(UserId),UserID).
f(command1,true,_UserID) -> do_command1();
% if command2 does not need to be registered but uses UserID, for registration for example
f(command2,_Reg,UserID) -> do_command2(User_ID);
f(_,false,_UserID) -> {error, not_registered}.