Skip to content

Commit

Permalink
Make calls to trait methods fully qualified in acl plugin (#21)
Browse files Browse the repository at this point in the history
* Make calls to `try_from` fully qualified

* Make calls to `emit` fully qualified
  • Loading branch information
mooori authored Oct 18, 2022
1 parent 5721332 commit 4be85a9
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 22 deletions.
53 changes: 33 additions & 20 deletions near-plugins-derive/src/access_controllable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ pub fn access_controllable(attrs: TokenStream, item: TokenStream) -> TokenStream
account: account_id.clone(),
by: ::near_sdk::env::predecessor_account_id(),
};
event.emit();
::#cratename::events::AsEvent::emit(&event);
}

is_new_super_admin
Expand Down Expand Up @@ -183,7 +183,7 @@ pub fn access_controllable(attrs: TokenStream, item: TokenStream) -> TokenStream
account: account_id.clone(),
by: ::near_sdk::env::predecessor_account_id(),
};
event.emit();
::#cratename::events::AsEvent::emit(&event);
}

was_super_admin
Expand Down Expand Up @@ -216,7 +216,7 @@ pub fn access_controllable(attrs: TokenStream, item: TokenStream) -> TokenStream
account: account_id.clone(),
by: ::near_sdk::env::predecessor_account_id(),
};
event.emit();
::#cratename::events::AsEvent::emit(&event);
}

is_new_admin
Expand Down Expand Up @@ -265,7 +265,7 @@ pub fn access_controllable(attrs: TokenStream, item: TokenStream) -> TokenStream
account: account_id.clone(),
by: ::near_sdk::env::predecessor_account_id(),
};
event.emit();
::#cratename::events::AsEvent::emit(&event);
}

was_admin
Expand Down Expand Up @@ -296,7 +296,7 @@ pub fn access_controllable(attrs: TokenStream, item: TokenStream) -> TokenStream
by: ::near_sdk::env::predecessor_account_id(),
to: account_id.clone(),
};
event.emit();
::#cratename::events::AsEvent::emit(&event);
}

is_new_grantee
Expand Down Expand Up @@ -329,7 +329,7 @@ pub fn access_controllable(attrs: TokenStream, item: TokenStream) -> TokenStream
from: account_id.clone(),
by: ::near_sdk::env::predecessor_account_id(),
};
event.emit();
::#cratename::events::AsEvent::emit(&event);
}

was_grantee
Expand Down Expand Up @@ -399,9 +399,10 @@ pub fn access_controllable(attrs: TokenStream, item: TokenStream) -> TokenStream
///
/// Panics if `skip` or `limit` are outside the range of `usize`.
fn get_bearers(&self, permission: #bitflags_type, skip: u64, limit: u64) -> Vec<::near_sdk::AccountId> {
let skip = usize::try_from(skip).expect("skip should be in the range of usize");
let limit = usize::try_from(limit).expect("limit should be in the range of usize");

let skip: usize = ::std::convert::TryFrom::try_from(skip)
.expect("skip should be in the range of usize");
let limit: usize = ::std::convert::TryFrom::try_from(limit)
.expect("limit should be in the range of usize");
let set = match self.bearers.get(&permission) {
Some(set) => set,
None => return vec![],
Expand Down Expand Up @@ -444,63 +445,75 @@ pub fn access_controllable(attrs: TokenStream, item: TokenStream) -> TokenStream
}

fn acl_add_admin(&mut self, role: String, account_id: ::near_sdk::AccountId) -> Option<bool> {
let role = <#role_type>::try_from(role.as_str()).expect(#ERR_PARSE_ROLE);
let role: #role_type = ::std::convert::TryFrom::try_from(role.as_str())
.expect(#ERR_PARSE_ROLE);
self.#acl_field.add_admin(role, &account_id)
}

fn acl_is_admin(&self, role: String, account_id: ::near_sdk::AccountId) -> bool {
let role = <#role_type>::try_from(role.as_str()).expect(#ERR_PARSE_ROLE);
let role: #role_type = ::std::convert::TryFrom::try_from(role.as_str())
.expect(#ERR_PARSE_ROLE);
self.#acl_field.is_admin(role, &account_id)
}

fn acl_revoke_admin(&mut self, role: String, account_id: ::near_sdk::AccountId) -> Option<bool> {
let role = <#role_type>::try_from(role.as_str()).expect(#ERR_PARSE_ROLE);
let role: #role_type = ::std::convert::TryFrom::try_from(role.as_str())
.expect(#ERR_PARSE_ROLE);
self.#acl_field.revoke_admin(role, &account_id)
}

fn acl_renounce_admin(&mut self, role: String) -> bool {
let role = <#role_type>::try_from(role.as_str()).expect(#ERR_PARSE_ROLE);
let role: #role_type = ::std::convert::TryFrom::try_from(role.as_str())
.expect(#ERR_PARSE_ROLE);
self.#acl_field.renounce_admin(role)
}

fn acl_revoke_role(&mut self, role: String, account_id: ::near_sdk::AccountId) -> Option<bool> {
let role = <#role_type>::try_from(role.as_str()).expect(#ERR_PARSE_ROLE);
let role: #role_type = ::std::convert::TryFrom::try_from(role.as_str())
.expect(#ERR_PARSE_ROLE);
self.#acl_field.revoke_role(role, &account_id)
}

fn acl_renounce_role(&mut self, role: String) -> bool {
let role = <#role_type>::try_from(role.as_str()).expect(#ERR_PARSE_ROLE);
let role: #role_type = ::std::convert::TryFrom::try_from(role.as_str())
.expect(#ERR_PARSE_ROLE);
self.#acl_field.renounce_role(role)
}

fn acl_grant_role(&mut self, role: String, account_id: ::near_sdk::AccountId) -> Option<bool> {
let role = <#role_type>::try_from(role.as_str()).expect(#ERR_PARSE_ROLE);
let role: #role_type = ::std::convert::TryFrom::try_from(role.as_str())
.expect(#ERR_PARSE_ROLE);
self.#acl_field.grant_role(role, &account_id)
}


fn acl_has_role(&self, role: String, account_id: ::near_sdk::AccountId) -> bool {
let role = <#role_type>::try_from(role.as_str()).expect(#ERR_PARSE_ROLE);
let role: #role_type = ::std::convert::TryFrom::try_from(role.as_str())
.expect(#ERR_PARSE_ROLE);
self.#acl_field.has_role(role, &account_id)
}

fn acl_has_any_role(&self, roles: Vec<String>, account_id: ::near_sdk::AccountId) -> bool {
let roles: Vec<#role_type> = roles
.iter()
.map(|role| <#role_type>::try_from(role.as_str()).expect(#ERR_PARSE_ROLE))
.map(|role| {
::std::convert::TryFrom::try_from(role.as_str()).expect(#ERR_PARSE_ROLE)
})
.collect();
self.#acl_field.has_any_role(roles, &account_id)
}

fn acl_get_admins(&self, role: String, skip: u64, limit: u64) -> Vec<::near_sdk::AccountId> {
let role = <#role_type>::try_from(role.as_str()).expect(#ERR_PARSE_ROLE);
let role: #role_type = ::std::convert::TryFrom::try_from(role.as_str())
.expect(#ERR_PARSE_ROLE);
let permission = <#bitflags_type>::from_bits(role.acl_admin_permission())
.expect(#ERR_PARSE_BITFLAG);
self.#acl_field.get_bearers(permission, skip, limit)
}

fn acl_get_grantees(&self, role: String, skip: u64, limit: u64) -> Vec<::near_sdk::AccountId> {
let role = <#role_type>::try_from(role.as_str()).expect(#ERR_PARSE_ROLE);
let role: #role_type = ::std::convert::TryFrom::try_from(role.as_str())
.expect(#ERR_PARSE_ROLE);
let permission = <#bitflags_type>::from_bits(role.acl_permission())
.expect(#ERR_PARSE_BITFLAG);
self.#acl_field.get_bearers(permission, skip, limit)
Expand Down
2 changes: 0 additions & 2 deletions near-plugins/tests/contracts/access_controllable/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
use near_plugins::events::AsEvent;
use near_plugins::{access_control, access_control_any, AccessControlRole, AccessControllable};
use near_sdk::borsh::{self, BorshDeserialize, BorshSerialize};
use near_sdk::serde::{Deserialize, Serialize};
use near_sdk::{env, log, near_bindgen, AccountId};
use std::collections::HashMap;
use std::convert::TryFrom;

#[derive(AccessControlRole, Deserialize, Serialize, Copy, Clone)]
#[serde(crate = "near_sdk::serde")]
Expand Down

0 comments on commit 4be85a9

Please sign in to comment.