feat: 添加角色权限控制和教师筛选功能

This commit is contained in:
Hvemi_han
2024-12-20 17:42:42 +08:00
parent 635a74385d
commit bb319d7946
21 changed files with 1760 additions and 275 deletions

View File

@ -8,12 +8,70 @@ export const useUser = defineStore("user", () => {
/**
* 判断是否有权限
* @param tag A: 课程制作教师(3) B: 课程制作方沟通联络人(2) C: 课程购买方项目负责人(1) D: 系统制作方项目负责人(4)
* @param role 角色类型
* @returns 是否有权限
*/
function hasJobTag(tag: "A" | "B" | "C" | "D") {
function hasRole(role: "teacher" | "admin" | "liaison" | "sysadmin") {
if (!userinfo.value) return false;
return userinfo.value?.jobs.some((job) => job.description === tag) || false;
const roleMap = {
teacher: 1, // 教师
admin: 2, // 普通管理员
liaison: 3, // 沟通联络人
sysadmin: 4 // 系统管理员
};
return userinfo.value.roles === roleMap[role];
}
/**
* 判断是否有指定岗位
* @param job 岗位类型
* @returns 是否有权限
*/
function hasJob(job: "teacher" | "projectManager" | "liaison" | "sysManager") {
if (!userinfo.value) return false;
const jobMap = {
teacher: 1, // 课程制作教师
projectManager: 2, // 课程购买方项目负责人
liaison: 3, // 课程制作方沟通联络人
sysManager: 4 // 系统制作方项目负责人
};
return userinfo.value.jobs === jobMap[job];
}
/**
* 判断是否有查看所有课程的权限
* @returns 是否有权限
*/
function canViewAllCourses() {
if (!userinfo.value) return false;
// 系统管理员或普通管理员可以查看所有课程
if (userinfo.value.roles === 4 || userinfo.value.roles === 2) return true;
// 课程制作方沟通联络人可以查看所有课程
if (userinfo.value.roles === 3 && userinfo.value.jobs === 3) return true;
return false;
}
/**
* 判断是否有编辑课程的权限
* @returns 是否有权限
*/
function canEditCourse() {
if (!userinfo.value) return false;
// 教师可以编辑自己的课程
if (userinfo.value.roles === 1) return true;
// 系统管理员可以编辑所有课程
if (userinfo.value.roles === 4) return true;
return false;
}
function logout() {
@ -24,7 +82,10 @@ export const useUser = defineStore("user", () => {
return {
token,
userinfo,
hasJobTag,
hasRole,
hasJob,
canViewAllCourses,
canEditCourse,
logout,
};
});