[web-devel] Need a subsite example/tutorial/documentation

Michael Snoyman michael at snoyman.com
Thu Mar 17 19:33:49 CET 2011


On Thu, Mar 17, 2011 at 8:01 PM,  <vagif.verdi at gmail.com> wrote:
> Both Snap and Happstack can match against partial route. And after handling it
> let it fall deeper to the next handler.
>
> Does yesod routing support such model ?

Sure, just use MultiPieces. For example:

mkYesod "MyApp" [$parseRoutes|
/*Strings RootR GET
|]

getRootR [] = ...
getRootR ["hello"] = ...
getRootR ("something":rest) = go rest

But even though you *can* do it, that doesn't mean I recommend it. One
of the major features that Yesod gives you versus Snap or Happstack is
type-safe URLs. Doing these kinds of matches undercuts that feature
drastically. So sure: contrary to popular belief, Yesod can express
the full routing flexibility present in Happstack and Snap. But
there's a very good reason to use the recommended approaches whenever
possible.

I think that isAuthorized[1] should provide you with the tool you need
to achieve this. I've written sites with very complex permissions code
using isAuthorized, and frankly I think it's a much better and simpler
approach to many other authorization systems out there. (And yes, I
would love to augment the Yesod book with some documentation on it.)

[1] http://hackage.haskell.org/packages/archive/yesod-core/0.7.0.1/doc/html/Yesod-Core.html#v:isAuthorized

>> You should be able to avoid a subsite by checking the url in the
> auhorization callbacks.
>
> Could you please elaborate. I do not even know where to begin to look for such
> callbacks.
>
> The scaffolded site has an authentication example. But it is implemented as a
> subsite. And i have a hard time figuring out how to create a subsite without a
> documentation.

I don't think a subsite is the solution you are looking for here. It
*could* solve your problem, but it would not be the most pleasant
approach. Subsites should be saved for reusable components whenever
possible.

Michael



More information about the web-devel mailing list