Ciao,

dovresti creare una classe derivata da "RoleProvider" e fare l'override dei metodi vari, volendo potresti anche non averne db...


ti faccio un esempio :

codice:
public class RoleMaager : RoleProvider
{
    public override void AddUsersToRoles(string[] usernames, string[] roleNames)
    {
        throw new NotImplementedException();
    }

    public override void CreateRole(string roleName)
    {
        throw new NotImplementedException();
    }

    public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
    {
        throw new NotImplementedException();
    }

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

    public override string[] GetRolesForUser(string username)
    {
        return new string[] { "Admin" };
    }

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

    public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
    {
        base.Initialize(name, config);
    }

    public override bool IsUserInRole(string username, string roleName)
    {
        throw new NotImplementedException();
    }

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

    public override bool RoleExists(string roleName)
    {
        throw new NotImplementedException();
    }

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

    public override string ApplicationName
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }
}
nel web.config :

codice:
<system.web>
    <authentication mode="Windows" />
    <roleManager enabled="true" defaultProvider="RoleMaager">
      <providers>
        <add name="RoleMaager" type="RoleMaager" connectionStringName="DatabaseEntities" />
      </providers>
    </roleManager>
nella pagina :

codice:
[PrincipalPermission(SecurityAction.Demand, Role = "Admin")]
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Roles.GetAllRoles();
    }
}
in questo scenario, prima di tutto viene chiamato (alla compilazione...) il metodo Initialize, dalla quale ottengo le varie informazioni in forma di key valore (da config) e il nome dell'applicazione, qui posso impostare ad esempio la connessione ad un db, successivamente, siccome ho utilizzato l'attributo "[PrincipalPermission(SecurityAction.Demand, Role = "Admin")]" nella pagina chiamata, viene chiamato GetRolesForUser, che mi passa il nome utente (in questo caso quello di windows) a questo punto, dentro il metodo potrei confrontarlo anche con un file di testo, o addirittura come ho fatto nell'esempio (ma solo come esempio!) dare a tutti il ruolo "Admin" (ma avrei potuto usare anche lavaCessi! bansta che nell'attributo lo impostavo così per accedere), quindi avendo avuto l'accesso alla pagina, nel load chiedo tutti i ruoli, chiamando così il metodo GetAllRoles (che non ho implementato), li avrei potuto restituire tutti i ruoli che volevo, e così via anche per gli altri metodi.

Ovviamente ho fatto qualche prova giusto così, quindi non sono esperto nel campo, ma se hai bisogno di una mano, prova a chiedere, magari riesco a dartela.