多角色身份验证

时间:2015-03-27 14:45:19

标签: haskell yesod

我正在尝试使用两种不同类型的登录开发一个yesod应用程序:管理员和用户。我在config / model中设置了两个模型,并且脚手架工具在数据库中自动生成相应的表。但是,我不知道如何进行身份验证:我可以做任何一个

    instance YesodAuth App where
       type AuthId App = AdminId

验证管理员或

   instance YesodAuth App where
       type AuthId App = UserId

验证用户身份。但是我如何同时做两件事呢? TIA。

1 个答案:

答案 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未导出,因此您需要在本地重新定义它。