0

私はいくつかのチュートリアルから CustomRoleProvider を実装する方法を学んでおり、以下のように 2 つの主要なメソッドを実装することができました

    public override string[] GetRolesForUser(string userName)
    {
        string connectionString =
          ConfigurationManager.ConnectionStrings["myDb"].ConnectionString;
        DataContext context = new DataContext(connectionString);
        Table<UserObj> usersTable = context.GetTable<UserObj>();
        UserObj userObj = usersTable.SingleOrDefault(u => u.UserName == userName);
        string roleId = userObj.UserRoleID;

        if (roleId != null)
            return roleId.Select(c => c.ToString()).ToArray();
        else
            return new string[] { }; 

    }

    public override bool IsUserInRole(string userName, string roleName)
    {
        string connectionString =
         ConfigurationManager.ConnectionStrings["myDb"].ConnectionString;
        DataContext context = new DataContext(connectionString);
        Table<UserObj> usersTable = context.GetTable<UserObj>();
        UserObj userObj = usersTable.SingleOrDefault(u => u.UserName == userName);

        if (userObj != null)
        {
            string roleId = userObj.UserRoleID;
            if (roleId.Equals(roleName))
                return true;
        }
       return false;
    }

次に、管理者のみがアクセスできるようにするコントローラーのインデックス メソッドに [Authorize(Roles = "admin")] を追加しました。ページにアクセスしようとすると、たとえば、次の URL を入力すると、制限が正常に実行されるようです。

       http://localhost:60353/module

..リダイレクトされました

        http://localhost:60353/Account/LogOn?ReturnUrl=%2fmodule

ただし、役割はチェックされていないようでした。

ここで私は何を間違えましたか?

4

1 に答える 1

0

私も同じ問題に直面していますが、CustomProvider メソッドを呼び出すことができます:

IsUserInRoles()

明示的にですが、アクセシビリティが変更されていないため、正しいようです....常にログイン画面のみにリダイレクトされます........

于 2013-08-21T06:13:07.173 に答える