美文网首页
EOS用户权限相关的表

EOS用户权限相关的表

作者: vergil6 | 来源:发表于2018-10-18 15:46 被阅读32次

    网上关于eos用户权限管理的内容已经有很多了,这里就不讨论了,这里主要讨论几张跟用户权限相关的表(关于eos数据库请参考 EOS内存数据库chainbase深入解析),跟用户权限相关的表一共有3张

    void authorization_manager::add_indices() {
          _db.add_index<permission_index>();
          _db.add_index<permission_usage_index>();
          _db.add_index<permission_link_index>();
       }
    
    • permission_usage_index
      该表很简单,它的表结构permission_usage_object定义
       class permission_usage_object : public chainbase::object<permission_usage_object_type, permission_usage_object> {
          OBJECT_CTOR(permission_usage_object)
    
          id_type           id;
          time_point        last_used;   //记录一个权限最后一次使用时间,它总是跟permission_index关联
       };
    
    • permission_index
      该表的表结构定义permission_object 如下, 该表由可以通过cleos set account permission来修改
       class permission_object : public chainbase::object<permission_object_type, permission_object> {
          OBJECT_CTOR(permission_object, (auth) )
    
          id_type                           id;
          permission_usage_object::id_type  usage_id;       // 记录该权限最后一次使用时间
          id_type                           parent;         // 父权限,例如默认active的父权限就是owner
          account_name                      owner;          // 这个权限属于哪个账户
          permission_name                   name;           // 权限名称,例如active
          time_point                        last_updated;   // 权限最后一次修改时间(cleos set account permission 命令修改)
          shared_authority                  auth;           // 执行该权限需要的授权
    }
    

    上述permission_object中的auth表示执行该权限需要的授权,shared_authority的定义如下:

    struct shared_authority {
    ...
       uint32_t                                   threshold = 0;          //  需要的阈值
       shared_vector<key_weight>                  keys;        //  授权的公钥列表
       shared_vector<permission_level_weight>     accounts;    //  授权的账号列表 例如 active@usera
       shared_vector<wait_weight>                 waits;                  // 需要等待时间列表
    }
    

    上述shared_authority 要想成功执行一个权限 keys,accounts,waits 3者的权重加起来必须 >= threshold 才能执行

    • permission_link_index
      该表的表结构定义permission_link_object如下
    class permission_link_object : public chainbase::object<permission_link_object_type, permission_link_object> {
          OBJECT_CTOR(permission_link_object)
    
          id_type        id;
          account_name    account;                  // 账号名称
          permission_name required_permission;      // 权限名称
          account_name    code;                     // 合约名称
          action_name       message_type;          // action name
       };
    

    该表记录一个action跟一个用户的某个权限绑定,那么以后该用户执行该action时候只能使用该关联的权限来执行该action,我们可以通过cleos set action permission来设置它,如果一个action没有跟一个用户的权限显式的通过上述关联,那么默认的作为行使action的权限就是用户的active权限

    相关文章

      网友评论

          本文标题:EOS用户权限相关的表

          本文链接:https://www.haomeiwen.com/subject/ahqszftx.html