我正在尝试使用两种不同类型的登录开发一个yesod应用程序:管理员和用户。我在config / model中设置了两个模型,并且脚手架工具在数据库中自动生成相应的表。但是,我不知道如何进行身份验证:我可以做任何一个
instance YesodAuth App where
type AuthId App = AdminId
验证管理员或
instance YesodAuth App where
type AuthId App = UserId
验证用户身份。但是我如何同时做两件事呢? TIA。
答案 0 :(得分:0)
我将创建一个fn get_context(value: u128) -> VMContext {
VMContext {
current_account_id: "alice.near".to_string(),
signer_account_id: "bob.near".to_string(),
signer_account_pk: vec![0, 1, 2],
predecessor_account_id: "carol.near".to_string(),
input: vec![],
block_index: 0,
account_balance: 0,
is_view: false,
storage_usage: 0,
block_timestamp: 123789,
attached_deposit: value,
prepaid_gas: 10u64.pow(9),
random_seed: vec![0, 1, 2],
output_data_receivers: vec![],
}
}
#[test]
fn test_market_creation() {
let mut context = get_context(500000000);
let config = Config::default();
testing_env!(context, config);
let mut contract = MyContract::default();
contract.do_something(); // Fire method with "carol.near" as predecessor
// Switch account to "bob.near"
contract.do_something(); // Fire method with "bob.near" as predecessor
}
类型的持久字段(必须在与
由于模板Haskell而被用作字段)。
Role
这是将import Database.Persist.TH
data Role
= User
| Admin
derivePersistField "Role"
用作字段的数据库表。
Role
将User
email String
role Role
定义为AuthId
UserId
现在创建一个函数来查找用户并检查它是否具有instance YesodAuth App where
type AuthId App = UserId
角色。
您可能需要修复一些函数调用和类型,因为我尚未编译
这是本地的。
Admin
很遗憾,Yesod.Auth.handleAuthLack未导出,因此您需要在本地重新定义它。