permissions.gno

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