修复普通用户访问非自己创建的资产无法打开原生ssh的bug

This commit is contained in:
dushixiang 2021-05-16 17:32:21 +08:00 committed by dushixiang
parent f8c29b23b9
commit d33779ac34
5 changed files with 21 additions and 38 deletions

View File

@ -213,35 +213,6 @@ func AssetUpdateEndpoint(c echo.Context) error {
return Success(c, nil) return Success(c, nil)
} }
func AssetGetAttributeEndpoint(c echo.Context) error {
assetId := c.Param("id")
if err := PreCheckAssetPermission(c, assetId); err != nil {
return err
}
attributeMap, err := assetRepository.FindAssetAttrMapByAssetId(assetId)
if err != nil {
return err
}
return Success(c, attributeMap)
}
func AssetUpdateAttributeEndpoint(c echo.Context) error {
m := echo.Map{}
if err := c.Bind(&m); err != nil {
return err
}
assetId := c.Param("id")
protocol := c.QueryParam("protocol")
err := assetRepository.UpdateAttributes(assetId, protocol, m)
if err != nil {
return err
}
return Success(c, "")
}
func AssetDeleteEndpoint(c echo.Context) error { func AssetDeleteEndpoint(c echo.Context) error {
id := c.Param("id") id := c.Param("id")
split := strings.Split(id, ",") split := strings.Split(id, ",")

View File

@ -133,7 +133,6 @@ func SetupRoutes(db *gorm.DB) *echo.Echo {
assets.PUT("/:id", AssetUpdateEndpoint) assets.PUT("/:id", AssetUpdateEndpoint)
assets.DELETE("/:id", AssetDeleteEndpoint) assets.DELETE("/:id", AssetDeleteEndpoint)
assets.GET("/:id", AssetGetEndpoint) assets.GET("/:id", AssetGetEndpoint)
assets.GET("/:id/attributes", AssetGetAttributeEndpoint)
assets.POST("/:id/change-owner", Admin(AssetChangeOwnerEndpoint)) assets.POST("/:id/change-owner", Admin(AssetChangeOwnerEndpoint))
} }

View File

@ -36,6 +36,7 @@ type AssetForPage struct {
Owner string `json:"owner"` Owner string `json:"owner"`
OwnerName string `json:"ownerName"` OwnerName string `json:"ownerName"`
SharerCount int64 `json:"sharerCount"` SharerCount int64 `json:"sharerCount"`
SshMode string `json:"sshMode"`
} }
func (r *Asset) TableName() string { func (r *Asset) TableName() string {

View File

@ -142,6 +142,22 @@ func (r AssetRepository) Find(pageIndex, pageSize int, name, protocol, tags stri
if o == nil { if o == nil {
o = make([]model.AssetForPage, 0) o = make([]model.AssetForPage, 0)
} else {
for i := 0; i < len(o); i++ {
if o[i].Protocol == "ssh" {
attributes, err := r.FindAttrById(o[i].ID)
if err != nil {
continue
}
for j := range attributes {
if attributes[j].Name == constant.SshMode {
o[i].SshMode = attributes[j].Value
break
}
}
}
}
} }
return return
} }

View File

@ -338,19 +338,15 @@ class Asset extends Component {
const id = record['id']; const id = record['id'];
const protocol = record['protocol']; const protocol = record['protocol'];
const name = record['name']; const name = record['name'];
const sshMode = record['sshMode'];
alert(sshMode)
message.loading({content: '正在检测资产是否在线...', key: id}); message.loading({content: '正在检测资产是否在线...', key: id});
let result = await request.post(`/assets/${id}/tcping`); let result = await request.post(`/assets/${id}/tcping`);
if (result.code === 1) { if (result.code === 1) {
if (result.data === true) { if (result.data === true) {
message.success({content: '检测完成,您访问的资产在线,即将打开窗口进行访问。', key: id, duration: 3}); message.success({content: '检测完成,您访问的资产在线,即将打开窗口进行访问。', key: id, duration: 3});
if (protocol === 'ssh') { if (protocol === 'ssh' && sshMode === 'naive') {
result = await request.get(`/assets/${id}/attributes`); window.open(`#/term?assetId=${id}&assetName=${name}`);
if (result.code === 1 && result['data']['ssh-mode'] === 'naive') {
window.open(`#/term?assetId=${id}&assetName=${name}`);
} else {
window.open(`#/access?assetId=${id}&assetName=${name}&protocol=${protocol}`);
}
} else { } else {
window.open(`#/access?assetId=${id}&assetName=${name}&protocol=${protocol}`); window.open(`#/access?assetId=${id}&assetName=${name}&protocol=${protocol}`);
} }