EasyNVR視訊平台的登入方式有兩種,一種是使用者名登入,也就是需要輸入使用者名密碼,一般在企業内部,管理人員可以設定可登入人員,并配置設定使用者名和密碼用于登入;另一種就是匿名登陸,這種登入方式相當于遊客登入,匿名登入狀态下,遊客可以檢視内容,但不能添加裝置做配置,當然,實際使用時如果不需要此功能,在我們登入鑒權頁面是可以關閉匿名登陸的。
今天,與大家分享的是TSINGSEE青犀視訊團隊在浏覽器測試EasyNVR新版功能的時候,偶然發現在匿名登陸下,裝置分組下并不顯示裝置資源,而在使用者登陸下就能夠正常顯示。
我調出了開發者模式,通過浏覽器觀察調用接口的傳回資料,可以看到使用匿名登陸檢視接口傳回的資料為空,是以在前端沒有顯示内容。
而使用管理者登入檢視接口傳回的資料是有内容的。
由此可知,是後端傳回資料導緻的使用匿名登入為空,進而導緻前端裝置分組資源為空。于是我看了下後端代碼,發現是此處邏輯有問題,遊客賬号和管理者賬号擁有一樣的權限,缺少了對遊客賬号的判斷。
if uname != defAdminUser {
selectStr := fmt.Sprintf(`%s.label_id,%s.name as label_name`, labelChannelTableName, labelTableName)
joinStr := fmt.Sprintf(`left join %s on %s.rid=%s.role_id left join %s on %s.camera_id=%s.id
left join %s on %s.camera_id=%s.id
left join %s on %s.label_id=%s.id`, roleChannelTableName, userRoleTableName, roleChannelTableName, channelTableName, roleChannelTableName, channelTableName,
labelChannelTableName, labelChannelTableName, channelTableName, labelTableName,
labelChannelTableName, labelTableName)
wherestr := fmt.Sprintf(`%s.uid=?`, userRoleTableName)
dbclient = dbclient.Table(userRoleTableName).
Select(selectStr).
Joins(joinStr).
Where(wherestr, uid)
} else {
selectStr := fmt.Sprintf(`%s.label_id,%s.name as label_name`, labelChannelTableName, labelTableName)
joinStr := fmt.Sprintf(`left join %s on %s.camera_id=%s.id left join %s on %s.label_id=%s.id`,
labelChannelTableName, labelChannelTableName, channelTableName, labelTableName, labelChannelTableName, labelTableName)
dbclient = dbclient.Table(channelTableName).
Select(selectStr).
Joins(joinStr)
}
複制
修改邏輯後,修改代碼為:
if uname != defAdminUser && uname != defGuestUser {
selectStr := fmt.Sprintf(`%s.label_id,%s.name as label_name`, labelChannelTableName, labelTableName)
joinStr := fmt.Sprintf(`left join %s on %s.rid=%s.role_id left join %s on %s.camera_id=%s.id
left join %s on %s.camera_id=%s.id
left join %s on %s.label_id=%s.id`, roleChannelTableName, userRoleTableName, roleChannelTableName, channelTableName, roleChannelTableName, channelTableName,
labelChannelTableName, labelChannelTableName, channelTableName, labelTableName,
labelChannelTableName, labelTableName)
wherestr := fmt.Sprintf(`%s.uid=?`, userRoleTableName)
dbclient = dbclient.Table(userRoleTableName).
Select(selectStr).
Joins(joinStr).
Where(wherestr, uid)
} else {
selectStr := fmt.Sprintf(`%s.label_id,%s.name as label_name`, labelChannelTableName, labelTableName)
joinStr := fmt.Sprintf(`left join %s on %s.camera_id=%s.id left join %s on %s.label_id=%s.id`,
labelChannelTableName, labelChannelTableName, channelTableName, labelTableName, labelChannelTableName, labelTableName)
dbclient = dbclient.Table(channelTableName).
Select(selectStr).
Joins(joinStr)
}
複制
修改過後匿名登陸的情況下也可以顯示裝置資源了:
EasyNVR流媒體解決方案
EasyNVR是由TSINGSEE青犀視訊團隊自主研發,它能夠通過簡單的網絡錄影機通道配置,将傳統監控行業裡面的高清網絡錄影機IP Camera、NVR等具有RTSP協定輸出的裝置接入到EasyNVR,EasyNVR能夠将這些視訊源的音視訊資料進行拉取,轉換為RTMP/HLS,進行全平台終端H5直播(Web、Android、iOS),并且EasyNVR能夠将視訊源的直播資料對接到第三方CDN網絡,實作網際網路級别的直播分發,EasyNVR的主要建設目标是将各種各樣的安防錄影機、NVR進行統一接入和管理,并控制流的按需輸出,對全平台終端提供統一的标準H5流輸出。