chore: project permission

This commit is contained in:
xiaojunnuo
2026-02-26 00:12:59 +08:00
parent faf08f6513
commit 3a8b5de8f7
14 changed files with 119 additions and 30 deletions
@@ -1,12 +1,14 @@
import { usePermission } from "/@/plugin/permission";
import { merge as LodashMerge } from "lodash-es";
import { useProjectStore } from "/@/store/project";
export type UseCrudPermissionExtraProps = {
hasActionPermission: (action: string) => boolean;
};
export type UseCrudPermissionExtra = (props: UseCrudPermissionExtraProps) => any;
export type UseCrudPermissionCompProps = {
prefix: string;
isProjectPermission?: boolean;
prefix?: string;
extra?: UseCrudPermissionExtra;
[key: string]: any;
};
@@ -20,14 +22,31 @@ export type UseCrudPermissionProps = {
export function useCrudPermission({ permission }: UseCrudPermissionProps) {
const { hasPermissions } = usePermission();
const prefix = permission instanceof Object ? permission.prefix : permission;
//根据权限显示按钮
function hasActionPermission(action: string) {
let hasActionPermission = (action: string) => {
if (!prefix) {
return true;
}
return hasPermissions(prefix + ":" + action);
};
let per: UseCrudPermissionCompProps = permission as any;
if (per == null) {
per = { prefix: "" };
}
if (typeof per === "string") {
per = {
prefix: per || "",
};
}
let prefix = per.prefix || "";
const isProjectPermission = per.isProjectPermission || false;
if (isProjectPermission) {
const projectStore = useProjectStore();
prefix = "";
hasActionPermission = function (value: string) {
return projectStore.hasPermission(value as string);
};
}
function buildCrudPermission(): any {
@@ -36,25 +55,44 @@ export function useCrudPermission({ permission }: UseCrudPermissionProps) {
}
let extra = {};
if (permission instanceof Object) {
extra = permission.extra;
if (permission.extra && permission.extra instanceof Function) {
extra = permission.extra({ hasActionPermission });
if (per instanceof Object) {
extra = per.extra;
if (per.extra && per.extra instanceof Function) {
extra = per.extra({ hasActionPermission });
}
}
let viewPermission = "view";
if (isProjectPermission) {
viewPermission = "read";
}
let addPermission = "add";
if (isProjectPermission) {
addPermission = "write";
}
let editPermission = "edit";
if (isProjectPermission) {
editPermission = "write";
}
let removePermission = "remove";
if (isProjectPermission) {
removePermission = "write";
}
return LodashMerge(
{
actionbar: {
buttons: {
add: { show: hasActionPermission("add") },
add: { show: hasActionPermission(addPermission) },
},
},
rowHandle: {
buttons: {
edit: { show: hasActionPermission("edit") },
remove: { show: hasActionPermission("remove") },
view: { show: hasActionPermission("view") },
edit: { show: hasActionPermission(editPermission) },
remove: { show: hasActionPermission(removePermission) },
view: { show: hasActionPermission(viewPermission) },
},
},
},