我在用
If(User.IsInRole("member"))
{
}
但无法让它在 C# MVC 类中工作。请注意,我没有在能够工作的控制器中使用它。我错过了什么?该代码甚至无法识别用户是什么。
我认为它可能是一个命名空间,但我已经使用了.Mvc
命名空间以及其他......
先感谢您
我在用
If(User.IsInRole("member"))
{
}
但无法让它在 C# MVC 类中工作。请注意,我没有在能够工作的控制器中使用它。我错过了什么?该代码甚至无法识别用户是什么。
我认为它可能是一个命名空间,但我已经使用了.Mvc
命名空间以及其他......
先感谢您
HttpContext.Current.User
改为使用
这是一种方法(在耦合方面是正确的,但它违反了单一责任原则):
if (Roles.IsUserInRole("member"))
{
}
基本上在这里,您使用的是Roles.IsUserInRole
静态方法,该方法又使用您在<roles>
web.config 部分中配置的角色提供程序来获取当前经过身份验证的用户的角色。
但这不是我建议您采用的方法。角色和成员资格提供者之类的内容应该特定于您的 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
}
}
}
正如您在这里看到的那样,这个类关心的是当前用户是否是成员以便执行他的业务逻辑,对吧?这个类不关心如何获取这些信息。这不是它的责任,如果你开始从类中获取它,你就违反了单一职责原则,这非常重要,因为现在你的类正在做两件事:检索角色信息和执行业务逻辑。
通过我推荐的方法,我们将这种责任倒转给调用代码,在这种情况下,调用代码通常恰好是一个 MVC 控制器,它可以查询角色提供者,如我的第一个示例所示,并将其传递给底层类。
如果这个类有更多的方法,而其他方法不需要这些信息,你也可以将布尔参数作为参数传递给方法,而不是使用构造函数注入。
用这个System.Web.HttpContext.Current.User.IsInRole("yourRole")