// +---------------------------------------------------------------------- namespace ywxapp\model; use think\model\concern\SoftDelete; use ywxapp\model\BaseModel; /** * BackendRole 类 * * @author ywxapp */ class BackendRole extends BaseModel { use SoftDelete; protected function getOptions(): array { return [ 'strict' => false, 'autoWriteTimestamp' => 'int', 'createTime' => 'create_at', 'updateTime' => 'update_at', 'deleteTime' => 'delete_at', 'defaultSoftDelete' => 0, 'append' => ['target'], 'hidden' => ['password', 'delete_at'], 'readonly' => ['id'], ]; } // 角色拥有的用户 public function admins() { return $this->belongsToMany(BackendAdmin::class, BackendRoleAccess::class, 'admin_id', 'role_id'); } /** * 角色 → 权限字符串(通过 role_permissions 表) */ public function powers() { // 返回的是 permission 字符串列表(不是 Menu 模型) return $this->belongsToMany(BackendPower::class, BackendRolePower::class, 'power_id', 'role_id')->field('power_id'); } // 【推荐】角色 → 菜单模型(通过中间表 role_permissions 关联 menus) public function menus() { return $this->belongsToMany(BackendPower::class, BackendRolePower::class, 'power_id', 'role_id', 'permission'); } /** * 表结构自愈:建表 + 关键列兜底(install.sql 为事实源)。 * 查询/写入前调用,避免老库缺表导致 1146。 */ public static function ensureSchema(): void { BaseModel::ensureTableFromInstall(BaseModel::currentPrefix(), 'backend_role'); } }