【问题标题】:Asp.net MVC4, how to use Role without using any providerAsp.net MVC4,如何在不使用任何提供程序的情况下使用角色
【发布时间】:2013-01-07 21:20:59
【问题描述】:

我想在 asp.net MVC4 项目中使用没有任何提供者的角色。

我在没有提供者的情况下成功登录和注销。

但是对于角色,我不知道如何设置。

这是我在 AccountController.cs 中的一部分

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
    if (ModelState.IsValid && myLogin(model.UserName, model.Password, persistCookie: model.RememberMe))
    {
    FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);

    //set Roles, how can I set role to users?
    if (HttpContext.User != null)
    {
        if (!Roles.RoleExists("Administrator"))
        {
        Roles.CreateRole("Administrator");
        }
        Roles.AddUserToRole(model.UserName, "Administrator");

        //string[] roles = { "Moderator", "Administrator" };
        //HttpContext.User = new GenericPrincipal(HttpContext.User.Identity, roles);
    }

    return RedirectToLocal(returnUrl);
    }

    // If we got this far, something failed, redisplay form
    ModelState.AddModelError("", "The user name or password provided is incorrect.");
    return View(model);
}

private bool myLogin(string userName, string password, bool persistCookie)
{
    if (userName == "root" && password == "root")
    {
    return true;
    }
    else
    {
    return false;
    }
}

//set Roles 部分不起作用,错误消息说,

未找到名为“root”的用户。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 异常详细信息:System.InvalidOperationException:未找到名为“root”的用户。

Web.config

<system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
    <roleManager enabled="true" />

我想使用角色检查来控制访问此页面,

[Authorize(Roles="Administrator")]
public ActionResult Contact()
{
      ViewBag.Message = "Your contact page.";
      return View();
}

如何为用户定义角色?对 Action 使用过滤器?

【问题讨论】:

  • 您希望如何在没有提供者的情况下使用角色?
  • 不可能吗?有没有办法简单地将角色“管理员”设置为“root”用户??
  • 我正在使用Mysql,我找到了Mysql Membership Provider,但我不想遵循用户表结构。所以我只想为我的项目制作非常简单的登录/注销和角色功能..
  • 如果没有在 Web.config 中定义 RoleProvider,就不能使用 Roles,就像没有 MembershipProvider 就不能使用 Membership。
  • 在 web.config 中定义 RoleProvider 需要多少费用?

标签: asp.net asp.net-mvc-4


【解决方案1】:

当您调用Roles.* 时,您基本上是在调用在您的web.config 中注册的底层角色提供程序。如果您不想使用默认角色提供程序(适用于 SQL 服务器),您可以随时write a custom role provider

您需要做的就是编写RoleProvider 类的自定义实现,或者至少是您打算使用的方法:

public class MyRoleProvider: RoleProvider
{
    ... your implementation comes here
}

然后在 web.config 中注册您的自定义角色提供者以替换默认角色提供者:

<roleManager defaultProvider="DefaultRoleProvider">
    <providers>
        <add name="DefaultRoleProvider" type="MyNamespace.MyRoleProvider, MyAssembly" />
    </providers>
</roleManager>

【讨论】:

    猜你喜欢
    • 2021-08-20
    • 2011-11-10
    • 2012-11-08
    • 2018-08-03
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    相关资源
    最近更新 更多