// 导出一个函数,该函数是模块的主要接口。
// 它接受两个参数:数据库对象db(用于数据库操作)和一个回调函数callback(在模型定义后执行)。
module.exports = function(db, callback) {
    // 定义一个名为"PermissionModel"的模型,用于表示系统中的权限。
    // 使用db.define方法,该方法来自传入的数据库对象db。
    db.define("PermissionModel", {
        // 定义模型的属性,这些属性将映射到数据库表中的列。
        
        // ps_id属性:权限的唯一标识符,类型为'serial',表示这是一个自增的序列。
        // key: true表明这个属性是主键。
        ps_id: {type: 'serial', key: true}, 
        // 注释:权限ID,自增主键,用于唯一标识每个权限记录。
        
        // ps_name属性:权限的名称,类型为字符串(String)。
        // 用于存储权限的描述性名称。
        ps_name: String, 
        // 注释:权限名称,类型为字符串,用于标识和描述权限。
        
        // ps_pid属性:父权限的ID,类型为数字(Number)。
        // 用于表示权限之间的层级关系,即哪个权限是另一个权限的父级。
        ps_pid: Number, 
        // 注释:父权限ID,类型为数字,用于建立权限的层级结构。
        
        // ps_c属性:控制器名称,类型为字符串(String)。
        // 在MVC架构中,控制器负责处理用户的请求。
        // 这个属性可能用于指示哪个控制器与这个权限相关联。
        ps_c: String, 
        // 注释:控制器名称,类型为字符串,用于指示处理请求的控制器。
        
        // ps_a属性:动作名称,类型为字符串(String)。
        // 在MVC架构中,动作是控制器中的一个方法,用于执行特定的任务。
        // 这个属性可能用于指示哪个动作与这个权限相关联。
        ps_a: String, 
        // 注释:动作名称,类型为字符串,用于指示控制器中要执行的动作。
        
        // ps_level属性:权限级别,类型为字符串(String)。
        // 这个属性可能用于表示权限的重要性或访问级别。
        ps_level: String 
        // 注释:权限级别,类型为字符串,用于表示权限的等级或重要性。
    }, {
        // 定义模型的选项,这些选项用于配置模型的行为或属性。
        
        // table选项:指定这个模型在数据库中对应的表名。
        // 在这个例子中,表名被指定为"sp_permission"。
        table: "sp_permission" 
        // 注释:指定模型对应的数据库表名为sp_permission,这是存储权限信息的数据库表。
    });
    
    // 调用回调函数callback,表示模型定义已经完成。
    // 回调函数不接受任何参数,因为它主要用于执行一些后续的逻辑处理,而不是处理模型定义的结果。
    return callback();
}