使用 Snap 进行身份验证:多次使用一个 snaplet

Authentication with Snap: Using a snaplet several times

我正在使用 Snap 构建一个需要对员工和客户进行身份验证的 Web 应用程序。到目前为止,我正在使用 snaplet-postgresql-simple 提供的 auth snaplet 来验证来自数据库中相同 table 的两种类型的用户。

因此初始化代码看起来像这样:

s  <- nestSnaplet "sess" sess $ initCookieSessionManager sessionKeyfile "sess" Nothing (Just sessionTimeout)
db <- nestSnaplet "pg" pg Pg.pgsInit
a  <- nestSnaplet "auth" auth $ initPostgresAuth sess db

出于以下原因,我正在考虑将这两种类型的用户分成两个 table:

我正在考虑为 postgresql-simple 和会话使用两个小片段实例。

初始化代码看起来像这样:

s1  <- nestSnaplet "sess1" sess1 $ initCookieSessionManager sessionKeyfile "sess1" Nothing (Just sessionTimeout)
s2  <- nestSnaplet "sess2" sess2 $ initCookieSessionManager sessionKeyfile "sess2" Nothing (Just sessionTimeout)
db  <- nestSnaplet "pg" pg Pg.pgsInit
a1  <- nestSnaplet "auth1" auth1 $ initPostgresAuth sess1 db
a2  <- nestSnaplet "auth2" auth2 $ initPostgresAuth sess2 db

是否可以使用多个这样的 snaplet 实例? 或者我的问题有更好的解决方案吗?

我不会使用两个实例。我会使用一个实例,其中一个用户代表两者共有的任何内容,然后添加一个用户类型列并将额外信息放在与外键链接的其他表中。