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
|
|
}
|