8

我正在做一个在公司中使用的项目。系统将只有 1 个管理员帐户。

管理员将添加系统用户,每个用户都可以创建自己的联系人。

我创建了一个用于连接数据库的 WCF 服务、一个用于管理员的 asp.net mvc3 项目以及另一个用于系统用户的 WPF 应用程序。

我的问题是:

我只有一个用户(管理员)可以使用这个 asp.net mvc 项目登录:我该如何处理这种情况?

我认为不需要会员提供者和数据库,因为我只与一个用户合作,对吗?

4

2 回答 2

8

试试这个:

网络配置

<authentication mode="Forms">
  <forms loginUrl="~/Admin/LogOn" timeout="2880" >
    <credentials passwordFormat="SHA1">
      <user name="admin" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8"/>
    </credentials>
  </forms>
</authentication>

密码格式设置为 SHA1,因此您的密码不会以明文形式显示。不过还是可以破解的。例如,使用在线 SHA1 生成器生成您自己的哈希。

loginUrl 是您的登录页面的路由(duh :P),所以如果它不同,请更改它。

凭据视图模型

public class CredentialsViewModel
{
    [Required]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }
}

您的登录视图的视图模型。

管理员控制器

public ViewResult LogOn()
{
    return View();
}

[HttpPost]
public ActionResult LogOn(CredentialsViewModel model, string returnUrl)
{
    if(ModelState.IsValid)
    {
        if(FormsAuthentication.Authenticate(model.UserName, model.Password))
        {
            FormsAuthentication.SetAuthCookie(model.UserName, false);
            return Redirect(returnUrl ?? Url.Action("Index", "Admin"));                
        }
        else
        {
            ModelState.AddModelError("", "Incorrect username or password");
        }
    }

    return View();
}

[Authorize]
public ViewResult Index()
{
    return View();
}

因此 LogOn 操作将验证从视图传递的凭据;将其与 web.config 数据进行比较。

这里的重要部分是[Authorize]属性,它将防止未经授权的用户访问。

于 2012-05-19T12:35:55.610 回答
0

您肯定需要一个 User 表来处理非管理员帐户。将 Admin 用户也添加到此表中,并添加一个标有“IsAdmin”的列,其中只有一个设置为 true,这将是微不足道的。成员资格和角色提供者可以很好地做到这一点,并且可以更快地构建您需要的内容,尽管它们往往会在您的数据库中到处乱跑。

.. 作为旁注,尽管您非常有信心只会有一个管理员帐户,但我怀疑要求最终会发生变化,并且可能不会另行通知。

于 2012-05-19T08:27:55.480 回答