feat: 添加角色权限控制和教师筛选功能
This commit is contained in:
@ -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,
|
||||
};
|
||||
});
|
||||
|
Reference in New Issue
Block a user