mirror of https://github.com/certd/certd
61 lines
1.4 KiB
TypeScript
61 lines
1.4 KiB
TypeScript
import { usePermission } from "/@/plugin/permission";
|
|
import _ from "lodash";
|
|
|
|
/**
|
|
* 设置按钮动作权限
|
|
* @param permission {prefix,extra}
|
|
*/
|
|
export function useCrudPermission({ permission }) {
|
|
const { hasPermissions } = usePermission();
|
|
|
|
const prefix = permission instanceof Object ? permission.prefix : permission;
|
|
|
|
//根据权限显示按钮
|
|
function hasActionPermission(action) {
|
|
if (!prefix) {
|
|
return true;
|
|
}
|
|
return hasPermissions(prefix + ":" + action);
|
|
}
|
|
|
|
function buildCrudPermission() {
|
|
if (permission == null) {
|
|
return {};
|
|
}
|
|
|
|
let extra = {};
|
|
if (permission instanceof Object) {
|
|
extra = permission.extra;
|
|
if (permission.extra && permission.extra instanceof Function) {
|
|
extra = permission.extra({ hasActionPermission });
|
|
}
|
|
}
|
|
|
|
return _.merge(
|
|
{
|
|
actionbar: {
|
|
buttons: {
|
|
add: { show: hasActionPermission("add") }
|
|
}
|
|
},
|
|
rowHandle: {
|
|
buttons: {
|
|
edit: { show: hasActionPermission("edit") },
|
|
remove: { show: hasActionPermission("remove") },
|
|
view: { show: hasActionPermission("view") }
|
|
}
|
|
}
|
|
},
|
|
extra
|
|
);
|
|
}
|
|
|
|
function merge(userOptions) {
|
|
const permissionOptions = buildCrudPermission();
|
|
_.merge(permissionOptions, userOptions);
|
|
return permissionOptions;
|
|
}
|
|
|
|
return { merge, buildCrudPermission, hasActionPermission };
|
|
}
|