使ってます
If(User.IsInRole("member"))
{
}
ただし、C#MVCクラスで機能させることはできません。動作させることができるコントローラーでは使用していないことに注意してください。私は何が欠けていますか?コードはユーザーが何であるかさえ認識しません。
名前空間かもしれないと思いますが、.Mvc
他の名前空間と同様に使用しました。
前もって感謝します
使ってます
If(User.IsInRole("member"))
{
}
ただし、C#MVCクラスで機能させることはできません。動作させることができるコントローラーでは使用していないことに注意してください。私は何が欠けていますか?コードはユーザーが何であるかさえ認識しません。
名前空間かもしれないと思いますが、.Mvc
他の名前空間と同様に使用しました。
前もって感謝します
HttpContext.Current.User
代わりに使用
これを行う1つの方法は次のとおりです(結合に関しては正しいですが、単一責任の原則に違反しています):
if (Roles.IsUserInRole("member"))
{
}
基本的にここでは、web.config のセクションで構成したロール プロバイダーを使用して、現在認証されているユーザーのロールを取得するRoles.IsUserInRole
静的メソッドを使用しています。<roles>
しかし、それは私がお勧めするアプローチではありません。ロールやメンバーシップ プロバイダーなどは、Web レイヤーに固有のものである必要があります。ビジネスクラスは、この情報を取得することに煩わされるべきではありません。この情報は、パラメーターとしてそれらに渡す必要があります。
たとえば、このクラスのすべてのメソッドがこの情報を必要とする場合、単純にコンストラクター インジェクションを使用できます。
public class MyClass
{
private readonly bool _isCurrentUserAMember;
public MyClass(bool isCurrentUserAMember)
{
_isCurrentUserAMember = isCurrentUserAMember;
}
public void SomeMethod()
{
if (_isCurrentUserAMember)
{
// do some business logic for members
}
else
{
// do some other business logic for non-members
}
}
}
ここでわかるように、このクラスが気にしているのは、ビジネス ロジックを実行するために現在のユーザーがメンバーであるかどうかですよね? このクラスは、この情報を取得する方法を気にしません。それはその責任ではなく、クラス内からフェッチを開始すると、クラスがロール情報の取得とビジネスロジックの実行という2つのことを行うため、非常に重要な単一責任の原則に違反しています。
私の推奨するアプローチでは、この責任を呼び出し元のコードに逆にしました。通常、この種のシナリオでは、最初の例で示したようにロール プロバイダーにクエリを実行し、それを基になるクラスに渡すことができる MVC コントローラーになります。
このクラスにさらにメソッドがあり、他のメソッドがこの情報を必要としない場合は、コンストラクター注入を使用する代わりに、ブール値パラメーターを引数としてメソッドに渡すこともできます。