Skip to content

Permission lifecycle

INFO

How AuthBuilder drives load → parse → apply for data scopes.

AuthorBuilder

  • AuthDialect — load/parse DB-side permission data (RespLoader, AuthLoader, …).
  • SQLBuilder kit — target query to modify.
  • WordBagDialect wordBag — grouped scope words (override via AuthFactory).
  • AuthUser authUser — current principal.
  • roleIds — roles to evaluate.
  • dataScopes — raw scope rows from DB.
  • AuthGoodsBag goodsBag — resources to filter.

Pipeline

1. Preflight

c#
.useDuty(_userManager, (duty) => {
    duty....
})

Scope resources:

c#
duty.useMenu(Pageid)
    .useVCLink(entity.cellLinkOID)
    .useLoginVisitBag(false)
    .useManVisit(manCode)
    .useOrgVisit(entity.KB_OrgOID)
    .useWordPara("{manCode}", manCode)

2. Load words

Override loadDataScopes() — read role scopes into dataScopes, then onLoadedWords.

3. Empty check

onEmpty when no scopes configured.

c#
resp.onEmpty((duty) => {
    kit.whereLikeLeft("b.Varchar1", myCode);
    return "";
})

4. Parse words

readRoleDataScopereadRolePipelineDialect.readRoleScopeCode.

Example RespPipeline:

c#
public class RespPipeline : PipelineDialect
{
    public override int readRoleScopeCode(WordBagDialect range, AuthWord role, AuthUser user)
    {
        if (role.scopeCode == "4") { range.addAll(); return 1; }
        else if (role.scopeCode == "28") { ... }
        // ... scope codes 29, 3, 2, 1, 7, 6, 999 ...
        return 0;
    }
}

5. Before dynamic words

invokeOnLoadedWords — inject business parameters for dynamic scopes.

6. Dynamic words

onBuildLiveWord — apply {taskBase}, {taskOrg}, {taskMan}, etc.

7. Static words

doWordBagBuildwordBag.builduseOrgIsField, useOrgLikeField, …

8. Final empty guard

dealEmptyAuthonEmpty or forced 1=2.