0

ロール プロバイダーを使用しようとしてきましたが、1 週間頭が痛くなりました。

私がやろうとしているのは、ユーザーが管理者である場合に「管理者」ページを表示できるようにすることだけです (データベースに管理者列を 0 または 1 に追加しました)

ログイン用のコントローラーのコードは次のとおりです

if (user.Admin == 1)
                        {
                            addUserToRole(user.UserID, "Admin");
                        }
                        else
                        {


                        }

ユーザーをロールに追加する方法は次のとおりです

public void addUserToRole(String user, String role)
        {
            if (!Roles.RoleExists(role))
                Roles.CreateRole(role);

            Roles.AddUserToRole(user, role);

}

管理コントローラの場合、これを入力したい

[Authorize(role= "admin")]

これが私のwebconfigです

<profile defaultProvider="DefaultProfileProvider">
      <providers>
        <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxx" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </profile>
    <membership defaultProvider="DefaultMembershipProvider">
      <providers>
        <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxx" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
      </providers>
    </membership>
    <roleManager defaultProvider="DefaultRoleProvider" enabled="true">
      <providers>
        <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxx" connectionStringName="Database2Entities1" applicationName="/" />
      </providers>
    </roleManager>

私の質問は、このロール プロバイダーを使用するためにデータベースを使用する必要があるかどうかです (つまり、ロール テーブルなどを追加する必要がありました)。はいの場合、これを実装できる別の方法はありますか?

4

1 に答える 1

0

SimpleMembership Provider を使用する場合、自動的に取得されるテーブルは次のようになります --> ユーザー テーブル、Roles、UsersInRoles、Membership で、Roles では希望する役割を追加でき、UsersInRoles では、この行でユーザーを役割に追加できます:ロール「管理者」をロールのデータベース テーブルにシードする

System.Web.Security.Roles.AddUsersToRole("username, "yourrolename");

データベースの Roles テーブルにロールをシードする方法は次のとおりです。

WebSecurity.InitializeDatabaseConnection("DefaultConnection",
  "UserProfile", "UserId", "UserName", autoCreateTables: true);

var roles = (SimpleRoleProvider)Roles.Provider;
var membership = (SimpleMembershipProvider)Membership.Provider;

if (!roles.RoleExists("Admin"))
{
     roles.CreateRole("Admin");
}

// you can do the seed of the role to user in the seed method too
if (membership.GetUser("user", false) == null)
{
     membership.CreateUserAndAccount("user", "123456");
}
if (!roles.GetRolesForUser("user1").Contains("Admin"))
{
    roles.AddUsersToRoles(new[] { "user" }, new[] { "Admin" });
} 

また、これを使用して、Web 構成のメンバーシップ パラグラフを変更する必要があります。

<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
  <providers>
    <clear />
    <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" />
  </providers>
</roleManager>
<membership defaultProvider="SimpleMembershipProvider">
  <providers>
    <clear />
    <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
  </providers>
</membership>

ただし、ユーザーをロールに追加するたびに行う必要はありません。お役に立てれば。

于 2013-11-27T22:04:17.263 に答える