fix(api): 统一用户ID参数及禁止删除公共模板
- 将模板相关接口中用户ID参数"userId"改为"current_user_id" - 修改前端模板列表删除按钮的显示逻辑 - API新增检查删除模板时是否为公共模板,owner_id为0时禁止删除 - 删除模板前检查模板存在性,返回404错误 - 修改调用构建查询字符串时使用"current_user_id"参数 - 更新请求URL构建逻辑,确保传递正确的用户ID参数
This commit is contained in:
parent
a275e71933
commit
5020b6bc61
|
|
@ -109,8 +109,8 @@ func (api *TemplatesAPI) createTemplate(w http.ResponseWriter, r *http.Request)
|
|||
|
||||
r = WithPayload(r, payload)
|
||||
|
||||
// 介URL参数获取用户ID
|
||||
if userIDStr := r.URL.Query().Get("userId"); userIDStr != "" {
|
||||
// 从 URL 参数获取用户ID
|
||||
if userIDStr := r.URL.Query().Get("current_user_id"); userIDStr != "" {
|
||||
var userID uint64
|
||||
if _, scanErr := fmt.Sscan(userIDStr, &userID); scanErr == nil && userID > 0 {
|
||||
payload.OwnerID = userID
|
||||
|
|
@ -152,7 +152,7 @@ func (api *TemplatesAPI) createTemplate(w http.ResponseWriter, r *http.Request)
|
|||
|
||||
// listTemplates 获取模板列表
|
||||
func (api *TemplatesAPI) listTemplates(w http.ResponseWriter, r *http.Request) {
|
||||
userIDStr := r.URL.Query().Get("userId")
|
||||
userIDStr := r.URL.Query().Get("current_user_id")
|
||||
|
||||
// 构建查询SQL
|
||||
querySQL := `SELECT id, name, datasource, main_table, file_format, visibility,
|
||||
|
|
@ -387,6 +387,18 @@ func (api *TemplatesAPI) patchTemplate(w http.ResponseWriter, r *http.Request, t
|
|||
|
||||
// deleteTemplate 删除模板
|
||||
func (api *TemplatesAPI) deleteTemplate(w http.ResponseWriter, r *http.Request, templateID string) {
|
||||
// 检查是否为公共模板(owner_id=0)
|
||||
var ownerID uint64
|
||||
rowOwner := api.metaDB.QueryRow("SELECT owner_id FROM export_templates WHERE id=?", templateID)
|
||||
if err := rowOwner.Scan(&ownerID); err != nil {
|
||||
fail(w, r, http.StatusNotFound, "template not found")
|
||||
return
|
||||
}
|
||||
if ownerID == 0 {
|
||||
fail(w, r, http.StatusForbidden, "公共模板不允许删除")
|
||||
return
|
||||
}
|
||||
|
||||
// 检查是否有关联的导出任务
|
||||
var jobCount int64
|
||||
row := api.metaDB.QueryRow("SELECT COUNT(1) FROM export_jobs WHERE template_id=?", templateID)
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@
|
|||
size="small"
|
||||
@click="openEdit(scope.row)">编辑</el-button>
|
||||
<el-button
|
||||
v-if="(!hasUserId) || (Number(scope.row.owner_id)!==0 && Number(scope.row.owner_id)===currentUserId)"
|
||||
v-if="Number(scope.row.owner_id)!==0 && ((!hasUserId) || Number(scope.row.owner_id)===currentUserId)"
|
||||
size="small"
|
||||
type="danger"
|
||||
@click="removeTemplate(scope.row.id)">删除</el-button>
|
||||
|
|
|
|||
|
|
@ -41,13 +41,13 @@ const getMerchantId = () => {
|
|||
|
||||
/**
|
||||
* 构建用户相关的查询字符串
|
||||
* @returns {string} 查询字符串,如 '?userId=1&merchantId=2'
|
||||
* @returns {string} 查询字符串,如 '?current_user_id=1&merchantId=2'
|
||||
*/
|
||||
const buildUserQueryString = () => {
|
||||
const userId = getUserId();
|
||||
const merchantId = getMerchantId();
|
||||
const parts = [];
|
||||
if (userId) parts.push('userId=' + encodeURIComponent(userId));
|
||||
if (userId) parts.push('current_user_id=' + encodeURIComponent(userId));
|
||||
if (merchantId) parts.push('merchantId=' + encodeURIComponent(merchantId));
|
||||
return parts.length ? ('?' + parts.join('&')) : '';
|
||||
};
|
||||
|
|
@ -95,6 +95,7 @@ const get = async (endpoint, options = {}) => {
|
|||
const userId = getUserId();
|
||||
const merchantId = getMerchantId();
|
||||
if (userId) queryParams.set('userId', userId);
|
||||
if (userId) queryParams.set('current_user_id', userId);
|
||||
if (merchantId) queryParams.set('merchantId', merchantId);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue