既存のコミュニティ バックエンドがあり、プレゼンテーション レイヤーに Umbraco を使用したいと思っています。.Net フォーム認証でログイン/ログアウトを実装するにはどうすればよいですか? (メンバー機能は使いたくない)。さまざまな種類のページにアクセスできるさまざまな種類のユーザーがいます。どうすればこれを制御できますか? ユーザーコントロール?
3 に答える
Umbraco は、そのメンバーシップ システムに ASP.NET メンバー/ロール プロバイダー モデルを使用しており、独自の実装のために既定のモデルを交換するのは非常に簡単な手順です。以前、Active Directory ストアに対してメンバーを認証するためにこれを行ったことがありますが、カスタム データベースに対して認証するのがはるかに難しいとは想像できません。
これによる利点は、Umbraco メンバーシップ システムと完全に統合できることです。カスタム ロール プロバイダーを使用することで、編集者は組み込みのページ編集機能を使用してページを制限できるようになり、独自のセキュリティ コントロールをフックする必要がなくなります。 .
UmbracoMembershipProviderクラスを拡張し、 ValidateUserメソッドをオーバーライドすることで、単純なメンバーシップ プロバイダーを作成できるはずです。私はこれを自分で行ったことはありませんが、行った人を知っています。
カスタム ロール プロバイダーに対して認証するには、RoleProviderから派生したクラスを作成する必要があります。オーバーライドするメソッドは、 IsUserInRole、FindUsersInRole、GetAllRoles 、およびGetRolesForUserです。
これは、Scott Guthrie のブログ投稿へのリンクです。デフォルト プロバイダーのソース コードなど、プロバイダー API について知っておく必要があるよりも多くの情報が記載されています。
私は umbraco サイトで 2 つのアプローチを使用しました。どちらのアプローチにも、ログインとログアウトのユーザー コントロールが含まれており、それぞれカスタム ソリューションでユーザーを認証し、資格情報をクリアします。また、どちらの方法でも、保護したいドキュメント タイプに umbracoMembersOnly 属性を追加します。
最初のアプローチでは、個々のテンプレートをチェックして、ユーザーがアクセスを制限されているかどうかを確認しました。これを抽象化するために、サイト全体で使用でき、XSLT またはユーザー コントロール マクロから呼び出すことができる isMember または isLoggedIn メソッドを含む siteuser クラスを作成しました。このアプローチの利点は、単に同じアクセス拒否ページを提供するのではなく、テンプレートごとにカスタム メッセージを調整できることです。
2 番目のアプローチ (私が現在好んでいる方法) は、任意のページにアクセスするユーザーの権利をチェックする (つまり、umbracoMembersOnly 属性をチェックし、true の場合はセッション変数をチェックする) 役割を担う Permissions マクロを作成する場合です。このマクロはマスター テンプレートに含まれるため、すべてのテンプレートで実行されます。ユーザーが現在のページにアクセスする権限を持っていない場合、同じページにリダイレクトしますが、クエリ文字列に ?alttemplate=RestrictedPage などを追加します。(アクセス許可マクロがクエリ文字列で alttemplate=RestrictedPage をチェックしていることを確認してください。そうしないと、リダイレクトの無限ループが発生します。)
http://osMemberControls.codeplex.comをチェックアウトできます。