0

我想在 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”的用户。

网页配置

<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();
}

如何为用户定义角色?在操作上使用过滤器?

4

1 回答 1

4

当您打电话时,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>
于 2013-01-07T22:20:39.540 回答