AuditManager
ภาพรวม
AuditManager เป็นโมดูลจัดการการตรวจสอบทรัพยากรใน NocoBase ครับ/ค่ะ ใช้สำหรับลงทะเบียนอินเทอร์เฟซทรัพยากรที่ต้องการให้มีการตรวจสอบ
การใช้งานเบื้องต้น
import { Plugin } from '@nocobase/server';
class PluginCustomAuditResourceServer extends Plugin {
async load() {
this.app.auditManager.registerAction('resource:action');
}
}
เมธอดของคลาส
setLogger()
กำหนดวิธีการส่งออก (output) สำหรับบันทึกการตรวจสอบ (audit logs) ครับ/ค่ะ
const auditManager = new AuditManager();
auditManager.setLogger({
log: async (auditLog: AuditLog) => console.log(auditLog);
})
รูปแบบการใช้งาน
setLogger(logger: AuditLogger)
ประเภท
export interface AuditLog {
uuid: string;
dataSource: string;
resource: string;
action: string;
sourceCollection?: string;
sourceRecordUK?: string;
targetCollection?: string;
targetRecordUK?: string;
userId: string;
roleName: string;
ip: string;
ua: string;
status: number;
metadata?: Record<string, any>;
}
export interface AuditLogger {
log(auditLog: AuditLog): Promise<void>;
}
registerAction()
ลงทะเบียนการดำเนินการของทรัพยากรที่ต้องการให้มีการตรวจสอบครับ/ค่ะ
รูปแบบการใช้งาน
registerAction(action: Action)
ประเภท
export interface UserInfo {
userId?: string;
roleName?: string;
}
export interface SourceAndTarget {
sourceCollection?: string;
sourceRecordUK?: string;
targetCollection?: string;
targetRecordUK?: string;
}
type Action =
| string
| {
name: string;
getMetaData?: (ctx: Context) => Promise<Record<string, any>>;
getUserInfo?: (ctx: Context) => Promise<UserInfo>;
getSourceAndTarget?: (ctx: Context) => Promise<SourceAndTarget>;
};
รายละเอียด
รองรับรูปแบบการเขียนหลายแบบ ดังนี้ครับ/ค่ะ
-
ใช้ได้กับทรัพยากรทั้งหมด
registerActions(['create']);
-
ใช้ได้กับการดำเนินการทั้งหมดของทรัพยากรที่ระบุ resource:*
registerActions(['app:*']);
-
ใช้ได้กับการดำเนินการที่เฉพาะเจาะจงของทรัพยากรที่ระบุ resource:action
registerAction(['pm:update']);
-
รองรับการส่งเมธอด getMetaData, getUserInfo และ getSourceAndTarget ที่กำหนดเองสำหรับการดำเนินการนั้นๆ ครับ/ค่ะ
registerActions([
'create',
{ name: 'auth:signIn', getMetaData, getUserInfo, getSourceAndTarget },
]);
ในกรณีที่อินเทอร์เฟซที่ลงทะเบียนมีการทับซ้อนกัน วิธีการลงทะเบียนที่มีความละเอียดเฉพาะเจาะจงมากกว่าจะมีลำดับความสำคัญสูงกว่าครับ/ค่ะ ตัวอย่างเช่น:
-
registerActions('create')
-
registerAction({ name: 'user:*', getMetaData })
-
registerAction({ name: 'user:create', getMetaData })
สำหรับอินเทอร์เฟซ user:create การลงทะเบียนในข้อ 3 จะมีผลครับ/ค่ะ
registerActions()
ลงทะเบียนการดำเนินการของทรัพยากรหลายรายการที่ต้องการให้มีการตรวจสอบครับ/ค่ะ
รูปแบบการใช้งาน
registerActions(actions: Action[])