не используеться кастомный role provider
От: SuperXren  
Дата: 24.10.10 12:57
Оценка:
Всем привет.

Возникла очень странная ситуация — реализовал кастомный провайдей ролей (только его — без membership provider).
Реализация была следующей:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Caching;
using System.Web.Security;

namespace CSSA
{
    public class CustomRoleProvider: RoleProvider
    {
        public override string ApplicationName
        {
            get { return "Service Auction"; }
            set { }
        }

        /// <summary>
        /// Add roles to users.
        /// </summary>
        /// <param name="usernames">list of member which need to accept roles</param>
        /// <param name="roleNames">The list of role, which will be apply to user List</param>
        public override void AddUsersToRoles(string[] usernames, string[] roleNames)
        {
            throw new NotImplementedException();
        }

        public override void CreateRole(string roleName)
        {
          
        }

        public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
        {
            return true;
        }

        public override string[] FindUsersInRole(string roleName, string usernameToMatch)
        {
            throw new NotImplementedException();
        }

        public override string[] GetAllRoles()
        {
            return Role.GetRoles().ToArray();
        }

        public override string[] GetRolesForUser(string username)
        {
            return Member.GetUserRoles(username).ToArray();
        }

        public override string[] GetUsersInRole(string roleName)
        {
            throw new NotImplementedException();
        }

        public override bool IsUserInRole(string username, string roleName)
        {
           return true;
        }

        public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
        {
            throw new NotImplementedException();
        }

        public override bool RoleExists(string roleName)
        {
            return true;
        }
    }
}

и дальше декларирую использование этого провайдера — как дефолтного:

<authentication mode="Forms">
            <forms name="lgnForm" loginUrl="Login.aspx" protection="All" timeout="120" path="/"/>
        </authentication>
   <roleManager enabled="true" defaultProvider="CustomRoleProvider">
     <providers>
       <clear/>
       <add name="CustomRoleProvider" type="CSSA.CustomRoleProvider"/>
     </providers>
   </roleManager>



Почему когда вызываю на дефолтной страничке на OnButton_Click при вызове HttpContext.Current.User.IsInRole("test") всегда false.

Это несмотря на то что мой кастомный провайдер всегда возвращает true.

В чем дело ???

Заранее благодарен за помощь.
Re: не используеться кастомный role provider
От: Аноним  
Дата: 18.03.11 11:43
Оценка:
Здравствуйте, SuperXren, Вы писали:

SX>Почему когда вызываю на дефолтной страничке на OnButton_Click при вызове HttpContext.Current.User.IsInRole("test") всегда false.


SX>Это несмотря на то что мой кастомный провайдер всегда возвращает true.


SX>В чем дело ???


SX>Заранее благодарен за помощь.


Для того что бы работала IsInRole необходимо реализовать функцию


SX> public override string[] GetRolesForUser(string username)

SX> {
SX> return Member.GetUserRoles(username).ToArray();
SX> }

таким образом, чтобы для текущего пользователя она возвращала "test", например так


public override string[] GetRolesForUser(string username)
{
return new[] {"test"};
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.