app: error handling: make custom Error Classes that can be `raise`d

- Generic Error
- UserUnauthorized Error
- UserForbidden Error
app: error handling: `raise UserForbiddenError` instead of `not_authorized!`