0x1::ACL
Access control list (acl) module. An acl is a list of account addresses who
have the access permission to a certain object.
This module uses a vector
to represent the list, but can be refactored to
use a “set” instead when it’s available in the language in the future.
ACL
empty
add
remove
contains
assert_contains
use 0x1::Errors;
use 0x1::Vector;
ACL
struct ACL has copy, drop, store
list: vector<address>
The ACL already contains the address.
const ECONTAIN: u64 = 0;
The ACL does not contain the address.
const ENOT_CONTAIN: u64 = 1;
empty
Return an empty ACL.
public fun empty(): ACL::ACL
public fun empty(): ACL {
ACL{ list: Vector::empty<address>() }
}
add
Add the address to the ACL.
public fun add(acl: &mut ACL::ACL, addr: address)
public fun add(acl: &mut ACL, addr: address) {
assert!(!Vector::contains(&mut acl.list, &addr), Errors::invalid_argument(ECONTAIN));
Vector::push_back(&mut acl.list, addr);
}
remove
Remove the address from the ACL.
public fun remove(acl: &mut ACL::ACL, addr: address)
public fun remove(acl: &mut ACL, addr: address) {
let (found, index) = Vector::index_of(&mut acl.list, &addr);
assert!(found, Errors::invalid_argument(ENOT_CONTAIN));
Vector::remove(&mut acl.list, index);
}
contains
Return true iff the ACL contains the address.
public fun contains(acl: &ACL::ACL, addr: address): bool
public fun contains(acl: &ACL, addr: address): bool {
Vector::contains(&acl.list, &addr)
}
assert_contains
assert! that the ACL has the address.
public fun assert_contains(acl: &ACL::ACL, addr: address)
public fun assert_contains(acl: &ACL, addr: address) {
assert!(contains(acl, addr), Errors::invalid_argument(ENOT_CONTAIN));
}