// 导出一个函数，该函数是模块的主要接口。
// 它接受两个参数：数据库对象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();
}