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)