我正在做一个用于销售和创建视频游戏的应用程序的实践,该应用程序的用户将具有仅由管理员分配的多个角色,为此我有两个集合,一个将存储所有角色,另一个用于用户,但我遇到问题,这是如何获取角色的ID, 我能想到的唯一方法是在我的用户模型中有一部分字符串,通过搜索角色名称来保存id,但这种方式不正确,因为它不保存对象的ID。
这是我的榜样角色和用户:
type Role struct {
ID primitive.ObjectID `bson:"_id,omitempty" json:"id"`
Name string `bson:"name,omitempty"`
State bool `bson:"state,omitempty"`
CreatedAt time.Time `bson:"created_at,omitempty" json:"created_at"`
UpdatedAt time.Time `bson:"updated_at,omitempty" json:"updated_at"`
}
type User struct {
ID primitive.ObjectID `bson:"_id,omitempty" json:"id"`
FirstName string `bson:"first_name,omitempty" json:"first_name"`
LastName string `bson:"last_name,omitempty" json:"last_name"`
Email string `bson:"email,omitempty" json:"email"`
Password string `bson:"Password,omitempty" json:"Password"`
Avatar string `bson:"avatar,omitempty" json:"avatar"`
Role []string `bson:"role,omitempty" json:"role"`
CreatedAt time.Time `bson:"created_at,omitempty" json:"created_at"`
UpdatedAt time.Time `bson:"updated_at,omitempty" json:"updated_at"`
}
这是我的创建用户:
func CreateUser(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
collection := storage.Connection().Database("testing")
collectionRole := collection.Collection("roles")
collectionUser := collection.Collection("users")
u := &model.User{}
if err := json.NewDecoder(r.Body).Decode(u); err != nil {
http.Error(w, "format incorrect", http.StatusBadRequest)
return
}
var rl []model.Role
var roles []string
cursor, err := collectionRole.Find(ctx, bson.D{{"name", bson.D{{"$in", u.Role}}}})
if err != nil {
http.Error(w, "collection not found ", 404)
return
}
冉冉说
相关分类