Search Apps Documentation Source Content File Folder Download Copy Actions Download

permissions.gno

2.99 Kb ยท 87 lines
 1package boards2
 2
 3const (
 4	PermissionBoardCreate         Permission = "board:create"
 5	PermissionBoardFlaggingUpdate            = "board:flagging-update"
 6	PermissionBoardFreeze                    = "board:freeze"
 7	PermissionBoardRename                    = "board:rename"
 8	PermissionMemberInvite                   = "member:invite"
 9	PermissionMemberInviteRevoke             = "member:invite-remove"
10	PermissionMemberRemove                   = "member:remove"
11	PermissionPermissionsUpdate              = "permissions:update"
12	PermissionRealmHelp                      = "realm:help"
13	PermissionRealmLock                      = "realm:lock"
14	PermissionRealmNotice                    = "realm:notice"
15	PermissionReplyCreate                    = "reply:create"
16	PermissionReplyDelete                    = "reply:delete"
17	PermissionReplyFlag                      = "reply:flag"
18	PermissionReplyFreeze                    = "reply:freeze"
19	PermissionRoleChange                     = "role:change"
20	PermissionThreadCreate                   = "thread:create"
21	PermissionThreadDelete                   = "thread:delete"
22	PermissionThreadEdit                     = "thread:edit"
23	PermissionThreadFlag                     = "thread:flag"
24	PermissionThreadFreeze                   = "thread:freeze"
25	PermissionThreadRepost                   = "thread:repost"
26	PermissionUserBan                        = "user:ban"
27	PermissionUserUnban                      = "user:unban"
28)
29
30const (
31	RoleGuest     Role = ""
32	RoleOwner          = "owner"
33	RoleAdmin          = "admin"
34	RoleModerator      = "moderator"
35)
36
37type (
38	// Permission defines the type for permissions.
39	Permission string
40
41	// Role defines the type for user roles.
42	Role string
43
44	// Args is a list of generic arguments.
45	Args []interface{}
46
47	// User contains user info.
48	User struct {
49		Address address
50		Roles   []Role
51	}
52
53	// UsersIterFn defines a function type to iterate users.
54	UsersIterFn func(User) bool
55
56	// Permissions define an interface to for permissioned execution.
57	// TODO: Add crossing support to Permissions
58	Permissions interface {
59		// HasRole checks if a user has a specific role assigned.
60		HasRole(address, Role) bool
61
62		// HasPermission checks if a user has a specific permission.
63		HasPermission(address, Permission) bool
64
65		// WithPermission calls a callback when a user has a specific permission.
66		// It panics on error.
67		WithPermission(realm, address, Permission, Args, func(realm))
68
69		// SetUserRoles adds a new user when it doesn't exist and sets its roles.
70		// Method can also be called to change the roles of an existing user.
71		// It panics on error.
72		SetUserRoles(realm, address, ...Role)
73
74		// RemoveUser removes a user from the permissioner.
75		// It panics on error.
76		RemoveUser(realm, address) (removed bool)
77
78		// HasUser checks if a user exists.
79		HasUser(address) bool
80
81		// UsersCount returns the total number of users the permissioner contains.
82		UsersCount() int
83
84		// IterateUsers iterates permissions' users.
85		IterateUsers(start, count int, fn UsersIterFn) bool
86	}
87)