EOS用户权限相关的表

2018-10-18  本文已影响32人  vergil6

网上关于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>();
   }
   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关联
   };
   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 才能执行

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权限

上一篇 下一篇

猜你喜欢

热点阅读