<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 擴展 > 此章節僅適應于代碼優先模式。 擴展是一種**高階的**,**低級**功能,可讓你在類型配置中定義任何數據。附加自定義元數據到某些字段,能讓你創建更復雜的通用解決方案。例如,使用擴展,你可以定義一些只能訪問部分字段的字段級角色。這些角色可以在運行時被映射出來,進而來確定調用者是否具有足夠的權限來檢索特定字段。 ### 添加自定義元數據 為字段添加自定義元數據,可以使用從 `@nestjs/graphql` 包中導出的 `@Extensions()` 裝飾器。 ```typescript @Field() @Extensions({ role: Role.ADMIN }) password: string; ``` 在上面的例子中,我們給 `role` 元數據屬性分配了 `Role.Admin` 的值。`Role` 是一個簡單的 TypeScript 枚舉變量,它將我們系統中可用的所有用戶角色進行分組。 請注意,除了在字段上設置元數據,你也可以在類層級和方法層級(例如,在查詢處理程序)上使用 `@Extensions()` 裝飾器。 ### 使用自定義元數據 利用自定義元數據的邏輯可以根據需求變得復雜。例如,你可以創建一個簡單的攔截器,來存儲/記錄每個方法被調用的事件,或創建一個<span style="color:red">字段中間件</span>,來匹配檢索具有調用者權限(字段級權限系統)限制的字段所需的角色。 出于說明目的,讓我們定義一個 `checkRoleMiddleware`,將用戶的角色(此處硬編碼)與訪問目標字段所需的角色進行比較: ```typescript export const checkRoleMiddleware: FieldMiddleware = async ( ctx: MiddlewareContext, next: NextFn, ) => { const { info } = ctx; const { extensions } = info.parentType.getFields()[info.fieldName]; /** * In a real-world application, the "userRole" variable * should represent the caller's (user) role (for example, "ctx.user.role"). */ const userRole = Role.USER; if (userRole === extensions.role) { // or just "return null" to ignore throw new ForbiddenException( `User does not have sufficient permissions to access "${info.fieldName}" field.`, ); } return next(); }; ``` 在這里,我們可以為 `password` 字段注冊一個中間件,如下所示: ```typescript @Field({ middleware: [checkRoleMiddleware] }) @Extensions({ role: Role.ADMIN }) password: string; ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看