-
Notifications
You must be signed in to change notification settings - Fork 289
/
group_member.go
131 lines (114 loc) · 3.39 KB
/
group_member.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package iam
import (
"context"
"github.com/hashicorp/boundary/internal/db"
"github.com/hashicorp/boundary/internal/errors"
"github.com/hashicorp/boundary/internal/iam/store"
"google.golang.org/protobuf/proto"
)
// MemberType defines the possible membership types for groups. We don't surface
// this in the API as of yet as it's always user and we don't have plans for
// others currently.
type MemberType uint32
const (
UnknownMemberType MemberType = 0
UserMemberType MemberType = 1
)
func (m MemberType) String() string {
return [...]string{
"unknown",
"user",
}[m]
}
const (
groupMemberViewDefaultTableName = "iam_group_member"
groupMemberUserDefaultTable = "iam_group_member_user"
)
// GroupMember provides a common way to return members.
type GroupMember struct {
*store.GroupMemberView
tableName string `gorm:"-"`
}
// TableName provides an overridden gorm table name for group members.
func (v *GroupMember) TableName() string {
if v.tableName != "" {
return v.tableName
}
return groupMemberViewDefaultTableName
}
// SetTableName sets the table name for the resource. If the caller attempts to
// set the name to "" the name will be reset to the default name.
func (v *GroupMember) SetTableName(n string) {
switch n {
case "":
v.tableName = groupMemberViewDefaultTableName
default:
v.tableName = n
}
}
// GroupMemberUser is a group member that's a User
type GroupMemberUser struct {
*store.GroupMemberUser
tableName string `gorm:"-"`
}
// ensure that GroupMember implements the interfaces of: Cloneable, db.VetForWriter
var (
_ Cloneable = (*GroupMemberUser)(nil)
_ db.VetForWriter = (*GroupMemberUser)(nil)
)
// NewGroupMemberUser creates a new in memory user member of the group. No
// options are currently supported.
func NewGroupMemberUser(groupId, userId string, _ ...Option) (*GroupMemberUser, error) {
const op = "iam.NewGroupMemberUser"
if groupId == "" {
return nil, errors.NewDeprecated(errors.InvalidParameter, op, "missing group id")
}
if userId == "" {
return nil, errors.NewDeprecated(errors.InvalidParameter, op, "missing user id")
}
return &GroupMemberUser{
GroupMemberUser: &store.GroupMemberUser{
MemberId: userId,
GroupId: groupId,
},
}, nil
}
func allocGroupMember() GroupMemberUser {
return GroupMemberUser{
GroupMemberUser: &store.GroupMemberUser{},
}
}
// Clone creates a clone of the GroupMember
func (m *GroupMemberUser) Clone() interface{} {
cp := proto.Clone(m.GroupMemberUser)
return &GroupMemberUser{
GroupMemberUser: cp.(*store.GroupMemberUser),
}
}
// VetForWrite implements db.VetForWrite() interface for group members.
func (m *GroupMemberUser) VetForWrite(ctx context.Context, r db.Reader, opType db.OpType, opt ...db.Option) error {
const op = "iam.(GroupMemberUser).VetForWrite"
if m.GroupId == "" {
return errors.New(ctx, errors.InvalidParameter, op, "missing group id")
}
if m.MemberId == "" {
return errors.New(ctx, errors.InvalidParameter, op, "missing member id")
}
return nil
}
// TableName returns the tablename to override the default gorm table name
func (m *GroupMemberUser) TableName() string {
if m.tableName != "" {
return m.tableName
}
return groupMemberUserDefaultTable
}
// SetTableName sets the tablename and satisfies the ReplayableMessage interface
func (m *GroupMemberUser) SetTableName(n string) {
switch n {
case "":
m.tableName = groupMemberUserDefaultTable
default:
m.tableName = n
}
}