haskell - Yesod admin auth with BrowserId and the scaffolded website -


i'm trying simple app yesod (a blog app) following https://www.youtube.com/watch?v=sadfv-qbvg8 (i used scaffolded website)

i want add simple authentification secure access of creation of article.

following http://www.yesodweb.com/book/authentication-and-authorization, added:

-- routes not requiring authentication. isauthorized (authr _) _ = return authorized isauthorized faviconr _ = return authorized isauthorized robotsr _ = return authorized isauthorized publisharticler _ = isadmin -- default authorized now. isauthorized _ _ = return authorized 

my new route publisharticler. isadmin function same in book:

isadmin =     mu <- maybeauthid     return $ case mu of         nothing -> authenticationrequired         "admin" -> authorized         _ -> unauthorized "you must admin" 

and doesn't compile :(

foundation.hs:76:38:     no instance (isstring userid) arising use of ‘isadmin’     in expression: isadmin     in equation ‘isauthorized’:         isauthorized publisharticler _ = isadmin     in instance declaration ‘yesod app’ 

i don't understand i'm doing wrong…

thanks,

edit:

more information authid, it's defined this:

type authid app = userid 

my model is:

user     ident text     password text maybe     uniqueuser ident     deriving typeable 

and want check if ident property equal (like email address example) authorize publish new articles.

maybeauthid return authid object if user authenticated. in example yesod book, authid synonym text: it's user name. text objects (and other types have isstring instances) can built string literals, why example code works: haskell knows how transform

"admin"

into text object.

you're using more complex type represent logged in user, either need provide isstring instance user (which build user without password, say):

instance isstring user    fromstring s = user (pack s) "" 

or, maybe easier, modify isadmin function ident part of user object, like:

 isadmin =    mu <- maybeauthid    return $ case mu of      nothing -> authenticationrequired      (user ident _) -> case ident of        "admin" -> authorized        _ -> unauthorized "you must admin" 

edit misread definition of authid, thought

type authid app = user 

in fact, have userid, ids of user objects in database. can 2 things: precompute list of ids of users have admin privilege , see if user id maybeauthid gives 1 of them, or read user in db given id , see if has rights...


Comments

Popular posts from this blog

twig - Using Twigbridge in a Laravel 5.1 Package -

jdbc - Not able to establish database connection in eclipse -

Kivy: Swiping (Carousel & ScreenManager) -