fix:完善权限管理,限制普通用户访问内容

This commit is contained in:
czhqwer
2025-03-29 23:40:58 +08:00
parent 34b55159bd
commit a312010f17
3 changed files with 32 additions and 18 deletions
@@ -7,6 +7,7 @@ import cn.czh.service.IStorageConfigService;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid; import javax.validation.Valid;
@RestController @RestController
@@ -42,7 +43,8 @@ public class ConfigController {
} }
@GetMapping("/getPassword") @GetMapping("/getPassword")
public Result<?> getPassword() { public Result<?> getPassword(HttpServletRequest request) {
return Result.success(authService.getMainUserPassword()); boolean mainUser = authService.isMainUser(request.getRemoteAddr());
return Result.success(authService.getMainUserPassword() + (mainUser ? 1 : 0));
} }
} }
@@ -73,11 +73,17 @@ export default {
async getPassword() { async getPassword() {
try { try {
const res = await getPassword(); const res = await getPassword();
this.tempPassword = res.data; const dataStr = res.data.toString();
if (res.data) { const password = dataStr.slice(0, -1);
const mainUser = dataStr.slice(-1) === '1';
this.tempPassword = password;
if (password) {
this.tempEnablePassword = true; this.tempEnablePassword = true;
this.showPasswordDialog = true; this.showPasswordDialog = true;
} }
this.$emit('main-user', mainUser);
} catch (error) { } catch (error) {
console.error('获取密码失败:', error); console.error('获取密码失败:', error);
} }
+20 -14
View File
@@ -10,14 +10,14 @@
<div class="menu-icon"></div> <div class="menu-icon"></div>
<div v-show="showMenu" class="dropdown-menu"> <div v-show="showMenu" class="dropdown-menu">
<div class="menu-item" @click="openSettings">上传设置</div> <div class="menu-item" @click="openSettings">上传设置</div>
<div class="menu-item" @click="openStorageConfig">存储配置</div> <div class="menu-item" v-if="isAdmin" @click="openStorageConfig">存储配置</div>
<div class="menu-item" @click="openPasswordConfig">密码设置</div> <div class="menu-item" v-if="isAdmin" @click="openPasswordConfig">密码设置</div>
<div class="menu-item" @click="openAbout">关于</div> <div class="menu-item" @click="openAbout">关于</div>
</div> </div>
</div> </div>
</div> </div>
<div class="tab-bar"> <div class="tab-bar">
<div v-for="tab in tabs" :key="tab.value" :class="['tab', { 'active': activeTab === tab.value }]" <div v-for="tab in filteredTabs" :key="tab.value" :class="['tab', { 'active': activeTab === tab.value }]"
@click="switchTab(tab.value)"> @click="switchTab(tab.value)">
{{ tab.label }} {{ tab.label }}
<div class="tab-underline"></div> <div class="tab-underline"></div>
@@ -41,7 +41,7 @@
@save="saveSettings" @close="closeSettings" /> @save="saveSettings" @close="closeSettings" />
<storage-config-modal :show="showStorageConfig" :storage-options="storageOptions" @close="closeStorageConfig" /> <storage-config-modal :show="showStorageConfig" :storage-options="storageOptions" @close="closeStorageConfig" />
<about-modal :show="showAbout" @close="closeAbout" /> <about-modal :show="showAbout" @close="closeAbout" />
<password-config :show="showPasswordConfig" @close="closePasswordConfig" /> <password-config :show="showPasswordConfig" @close="closePasswordConfig" @main-user="handleMainUser" />
</div> </div>
</div> </div>
</template> </template>
@@ -62,15 +62,6 @@ export default {
return { return {
fileList: [], fileList: [],
activeTab: 'local', activeTab: 'local',
tabs: [
{ label: 'Local', value: 'local' },
{ label: 'MinIO', value: 'minio' },
{ label: 'OSS', value: 'oss' },
{ label: 'OBS', value: 'obs' },
{ label: 'QiNiu', value: 'qiniu' },
{ label: '已上传文件', value: 'gallery' },
{ label: '共享文件', value: 'shared' },
],
showMenu: false, showMenu: false,
showSettings: false, showSettings: false,
showStorageConfig: false, showStorageConfig: false,
@@ -82,10 +73,22 @@ export default {
{ label: 'Local', value: 'local' }, { label: 'Local', value: 'local' },
{ label: 'MinIO', value: 'minio' }, { label: 'MinIO', value: 'minio' },
{ label: 'OSS', value: 'oss' } { label: 'OSS', value: 'oss' }
] ],
isAdmin: false,
}; };
}, },
computed: { computed: {
filteredTabs() {
return [
{ label: 'Local', value: 'local' },
{ label: 'MinIO', value: 'minio' },
{ label: 'OSS', value: 'oss' },
{ label: 'OBS', value: 'obs' },
{ label: 'QiNiu', value: 'qiniu' },
{ label: '共享文件', value: 'shared' },
...(this.isAdmin ? [{ label: '已上传文件', value: 'gallery' }] : []),
];
},
isWipTab() { isWipTab() {
return this.activeTab === 'obs' || this.activeTab === 'qiniu'; return this.activeTab === 'obs' || this.activeTab === 'qiniu';
} }
@@ -133,6 +136,9 @@ export default {
}, },
closePasswordConfig() { closePasswordConfig() {
this.showPasswordConfig = false; this.showPasswordConfig = false;
},
handleMainUser(isMainUser) {
this.isAdmin = isMainUser;
} }
} }
}; };