Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

role.gno

1.71 Kb · 63 lines
 1package rbac
 2
 3const zeroAddress = address("")
 4
 5// Role represents a role with a name and an assigned address.
 6type Role struct {
 7	// name represents the role's identifier
 8	name    string
 9	address address
10}
11
12// NewRole creates a new Role instance with roleName.
13//
14// Parameters:
15//   - roleName: Role identifier stored in the new Role without normalization.
16//   - addr: Address stored as the role's initial assignment without validation.
17//
18// Returns:
19//   - *Role: New role containing roleName and its initially assigned addr.
20func NewRole(roleName string, addr address) *Role {
21	return &Role{
22		name:    roleName,
23		address: addr,
24	}
25}
26
27// Name returns the role's name.
28//
29// Returns:
30//   - string: Role identifier stored in the Role.
31func (r *Role) Name() string { return r.name }
32
33// Address returns the address assigned to this role. Returns empty address if no address is assigned.
34//
35// Returns:
36//   - address: Address currently assigned to the role, or the empty address when unassigned.
37func (r *Role) Address() address {
38	return r.address
39}
40
41// IsEmpty returns true if no address is assigned to this role.
42//
43// Returns:
44//   - bool: true when the stored role address equals the empty address; false when an address is assigned.
45func (r *Role) IsEmpty() bool {
46	return r.Address() == zeroAddress
47}
48
49// IsAuthorized returns true if addr matches the role's assigned address.
50//
51// Parameters:
52//   - addr: Address to compare with the role's stored assignment.
53//
54// Returns:
55//   - bool: true when addr exactly equals the assigned address; false otherwise.
56func (r *Role) IsAuthorized(addr address) bool {
57	return r.Address() == addr
58}
59
60// setAddress assigns addr to this role.
61func (r *Role) setAddress(addr address) {
62	r.address = addr
63}