ETCD后台服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

141 lines
3.7 KiB

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
}