package models import ( "time" "github.com/jinzhu/gorm" ) const ( ReadOnly = iota ReadWrite ) // RoleEtcdServersModel 角色权限表 type RoleEtcdServersModel struct { Id int32 `gorm:"column:id;primary_key" json:"id"` // EtcdServerId int32 `gorm:"column:etcd_server_id" json:"etcd_server_id"` // etcd服务id Type int32 `gorm:"column:type" json:"type"` // 0读 1写 RoleId int32 `gorm:"column:role_id" json:"role_id"` // 角色id CreatedAt JSONTime `gorm:"column:created_at" json:"created_at"` // 添加时间 UpdatedAt JSONTime `gorm:"column:updated_at" json:"updated_at"` // 更新时间 } // TableName 获取表名 func (RoleEtcdServersModel) TableName() string { return gorm.DefaultTableNameHandler(nil, "role_etcd_servers") } // FirstByRoleIdAndEtcdServerIdAndType 根据role_id、etcd_server_id和type查询一条数据 func (m *RoleEtcdServersModel) FirstByRoleIdAndEtcdServerIdAndType(roleId, etcdServerId, typ int32) (err error) { err = client.Table(m.TableName()).Where("role_id = ? and etcd_server_id = ? and type >= ?", roleId, etcdServerId, typ).First(m).Error return } // UpByEtcdId 根据etcd_id更新角色 func (m *RoleEtcdServersModel) UpByEtcdId(list []*AllByEtcdIdData) (err error) { tx := client.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() // 先删除再插入 err = tx.Table(m.TableName()).Where("etcd_server_id = ?", list[0].EtcdServerId).Delete(m).Error if err != nil { return } now := JSONTime(time.Now()) for _, v := range list { typ := -1 if v.Write == 1 { typ = 1 } else if v.Read == 1 { typ = 0 } one := &RoleEtcdServersModel{ EtcdServerId: v.EtcdServerId, Type: int32(typ), RoleId: v.RoleId, CreatedAt: now, UpdatedAt: now, } err = tx.Create(one).Error if err != nil { return } } return } type AllByEtcdIdData struct { EtcdServerId int32 `gorm:"column:etcd_server_id" json:"etcd_server_id"` // etcd服务id RoleId int32 `gorm:"column:role_id" json:"role_id"` // 角色id Name string `gorm:"column:name" json:"name"` Type int32 `gorm:"column:type" json:"type"` Read int32 `gorm:"column:read" json:"read"` Write int32 `gorm:"column:write" json:"write"` } // AllByEtcdId 查询etcd服务权限配置列表 func (m *RoleEtcdServersModel) AllByEtcdId(etcdId int32) (list []*AllByEtcdIdData, err error) { err = client.Table(m.TableName()+" as re").Select("r.name, re.type, re.etcd_server_id, re.role_id"). Joins(" join "+new(RolesModel).TableName()+" as r on r.id = re.role_id"). Where("etcd_server_id = ?", etcdId). Scan(&list).Error if err == nil { for _, v := range list { if v.Type == 1 { v.Write = 1 v.Read = 1 } else if v.Type == 0 { v.Write = 0 v.Read = 1 } else { v.Write = 0 v.Read = 0 } } } rList, _err := new(RolesModel).All() if _err != nil { err = _err return } if len(rList) > len(list) { for _, v := range rList { exist := false for _, v1 := range list { if v1.RoleId == v.Id { exist = true } } if exist == false { list = append(list, &AllByEtcdIdData{ EtcdServerId: etcdId, RoleId: v.Id, Name: v.Name, Type: -1, Read: 0, Write: 0, }) } } } return } // Save 保存角色信息 func (m *RoleEtcdServersModel) Save() (err error) { err = client.Table(m.TableName()).Create(m).Error return } // DelByEtcdId 删除 func (m *RoleEtcdServersModel) DelByEtcdId(etcdId int32) (err error) { err = client.Table(m.TableName()).Where("etcd_server_id = ?", etcdId).Delete(m).Error return }