8

会社で使うプロジェクトに取り組んでいます。システムには、管理者アカウントが1つだけあります。

管理者はシステムユーザーを追加し、各ユーザーは自分の連絡先を作成できます。

データベースに接続するためのWCFサービス、管理者用のasp.net mvc3プロジェクト、およびシステムユーザー用の別のWPFアプリを作成しました。

私の質問は:

このasp.netmvcプロジェクトでログインするユーザー(admin)は1人だけです:この状況でどのように作業しますか?

私は1人のユーザーしか操作していないので、メンバーシッププロバイダーとデータベースは必要ないと思いますよね??

4

2 に答える 2

8

これを試して:

web.config :

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

パスワードの形式は SHA1 に設定されているため、パスワードはクリア テキストでは表示されません。それでも割れることはあります。たとえば、オンライン SHA1 ジェネレーターを使用して独自のハッシュを生成します。

loginUrl はあなたのログイン ページへのルートなので (当然 :P)、異なる場合は変更します。

CredentialsViewModel :

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 テーブルが必要です。管理者ユーザーもこのテーブルに追加し、「IsAdmin」というラベルの付いた列を追加して、その列のみが true に設定されるのは簡単です。メンバーシップ プロバイダーとロール プロバイダーはこれを適切に行うことができ、必要なものをより迅速に構築できる可能性がありますが、データベース全体に干渉する傾向があります。

.. 補足として、管理者アカウントは 1 つしかないと確信していますが、その要件は最終的に、おそらく予告なしに変更されると思います。

于 2012-05-19T08:27:55.480 に答える