3

定義済みのコントローラーとstatic scaffold = true、いくつかのカスタムアクションがあります。

ログインしているユーザーとADMINタイプ(Enumドメイン内の値)のユーザーのみがアクセスできるようにしたいと思います。これを実現するために、/admin/**URIスペースにマップされるgrailsフィルターを実装しましたが、もちろん、スキャフォールディングがその下にない場合の問題のドメイン/コントローラーのURIです。表示/編集/作成アクション(スキャフォールドレイヤーに直接機能して委任する)のカスタムの名前付きURLマッピングを追加しましたが、この目的専用の2つのURIコンテキストになります。

スキャフォールドコントローラーに「このURIをすべてのURIのプレフィックスとして使用する」と言ってそれを実行できるようにしたいと思いますが、ドキュメントやWebの検索は一般的にあまり役に立ちませんでした。

何か案は?

4

1 に答える 1

5

スキャフォールドコントローラーは、URLマッピングの影響を受けやすい標準のtaglib呼び出しを使用してすべてのURLを生成します。したがって、URLマッピングが正しい場合は、正常に機能するはずです。MyDomainControllerマップしたいものがある場合は、次の/adminようなものが必要です

class UrlMappings {
  static mappings = {
    "/$controller/$action?/$id?" {
      constraints {
        controller(validator:{
          // make sure this mapping doesn't apply to the MyDomainController,
          // so it will only be accessible via the protected /admin URL
          return it != "myDomain"
        })
      }
    }

    // special rule for the MyDomainController
    "/admin/myDomain/$action?/$id?"(controller:"myDomain")
  }
}

URLマッピングで通常のGrails制約タイプのいずれかを使用できるため、ホワイトリストで制限できます

controller(inList:['foo', 'bar'])

または正規表現によって

// exclude all controllers whose name starts "sec", e.g. secUser, secRole, ...
controller(matches:/(?!sec).*/)
于 2013-01-15T12:37:33.283 に答える