0

我自己的数据库中有一个用户表,它有一个“类型”字段。有 3 种类型的用户,发布者、审核员和管理员。我想知道如何使用 [Authorize(Role="Publisher")] 之类的过滤器来过滤登录的用户????

4

1 回答 1

0

据我了解, [Authorize(Role="")] 属性在您使用角色提供程序时使用。您可以很容易地自己滚动 - 请参阅链接以获取指南。

通常我所做的是有一个 User 表、Role 表和一个 UserInRole 表。角色表只有一个角色 ID,例如“Admin”和一个描述。UserInRole 表是一个将用户 ID 链接到角色 ID 的连接表。

这样一个用户可以属于多个角色,而不是只绑定一个。

请注意这是我这样做的方式 - 不一定是正确的方式。如果您想在用户表中使用您的“类型”字段,那么它仍然可以工作 - 您的自定义角色提供程序将与我的不同。

编辑:另外 - [Authorize] 属性仅适用于成员资格提供者,并且不需要角色提供者。我认为语法是 [Authorize(User="User1,User2")] 或类似的东西。

编辑:要将用户带到错误页面,表明他的角色不正确,您可以在 AccountController 中的 Login 方法中添加一些自定义逻辑:

[HttpPost]
        public ActionResult LogOn(LogOnModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {

                if (Membership.ValidateUser(model.UserName, model.Password))
                {
                    if (!User.IsInRole("MyRole"))
                    {
                        return Redirect("Error");

                    }
                    else
                    {
                        FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                        if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                            && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                        {
                            return Redirect(returnUrl);
                        }
                        else
                        {
                            return RedirectToAction("Index", "Home");
                        }

                    }

                }
                else
                {
                    ModelState.AddModelError("", "The email or password provided is incorrect.");
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }
于 2011-08-12T17:47:50.657 回答