Archief - ASP.NET: role toekennen methode overriden maar hoe?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Arten

Legacy Member
oi

voor een asp.net website gebruiken we gewoon de logincontrole van asp en overriden daar de authenticate methode op deze manier:

Code:
 Protected Sub Login1_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs) Handles Login1.Authenticate
        Dim role As String
        Dim logbll As New LoginBLL
        If (Login1.Password.Equals(logbll.GetPaswoordByUsername(Login1.UserName))) Then
            e.Authenticated = True
            role = logbll.GetRoleByUsername(Login1.UserName)
            
        Else
            e.Authenticated = False
        End If
    End Sub

wij werken nu met 1 sitemap op de volgende manier:

Code:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >

  
  <siteMapNode   url="~/Default.aspx" title="Home"  description="Home" >
    <siteMapNode title="Login" url="~/Login/login.aspx" description="Login" >
    </siteMapNode>
    
    <siteMapNode title="Je contract" url="~/student/contract/Default.aspx" description="Contract gegevens">
      <siteMapNode url="~/student/contract/contract.aspx" title="Contract" description="Alle contract informatie." />
      <siteMapNode url="~/student/contract/maatregels.aspx" title="Toegekende maatregels" description="Toegekende maatregels." />
    </siteMapNode>

    <siteMapNode title="Je rooster" url="~/student/rooster/Default.aspx" description="rooster" >
      <siteMapNode url="~/student/rooster/lesrooster.aspx" title="Lessenrooster" description="Lessenrooster gegevens." />
      <siteMapNode url="~/student/rooster/examenrooster.aspx" title="Examenrooster" description="Examenrooster gegevens" />
      <siteMapNode url="~/student/rooster/search.aspx" title="Zoek" description="Zoeken naar een vak, docent,... " />
    </siteMapNode>
    
    <siteMapNode title="Docent" url="~/Docent/Default.aspx" description="Docent" >
      <siteMapNode url="~/Docent/Gegevens/MijnGegevens.aspx" title="Mijn Gegevens" description="Mijn Gegevens." />
      <siteMapNode url="~/Docent/Gegevens/MijnStudenten.aspx" title="Mijn Studenten met Bijzonder Statuut" description="Mijn Studenten." />
    </siteMapNode>

    <siteMapNode title="Admin" url="~/Admin/Default.aspx" description="Admin" roles="Admin">
      <siteMapNode url="~/Admin/CreateAccount.aspx" title="Nieuwe gebruiker aanmaken" description="Nieuwe gebruiker aanmaken"/>
      <siteMapNode url="~/Admin/StudentenOverzicht.aspx" title="Overzicht studenten met bijzonder statuut" description="Overzicht studenten met bijzonder statuut"/>
    </siteMapNode>
    
    <siteMapNode title="Blackboard" url="http://bb.kdg.be" description="Contact gegevens studentendiest, docenten,..." roles="*">
    </siteMapNode>
    
    <siteMapNode title="Contacteer ons" url="~/contact.aspx" description="Contact gegevens studentendiest, docenten,..." >
    </siteMapNode>
   
  </siteMapNode>
</siteMap>

asp gebruikte vroeger dus zijn eigen db met zijn eigen roles etc die je zo via de wizard kunt instellen.
nu gebruiken we met de login dus onze eigen db en hebben ook ene methode om de rol op te halen, maar we weten dus niet hoe we die role kunnen instellen zodat die terug werkt met die sitemap (met een session werkt het niet)

iemand enig idee welke methode ik moet override en hoe?
want in login.aspx is er bv de authenticate event maar ik vind nergens iets ivm met die roles

alvast heel erg bedankt

Dokterice

Legacy Member
RoleProvider ms = System.Web.Security.RoleProvider();
ms.GetUsersInRole("admin");

Arten

Legacy Member
ik snap niet wat ik daarmee ben...

ik moet net zetten dat hij de role in onze db gaat ophalen en hem dan terug instelt ...

AsinuS

Legacy Member
je moet een default roleprovider aanmaken en die laten erven van RoleProvider

dan werken de standaard controls wel als ge roleprovider in uwe web.config aanzet

grtz

Arten

Legacy Member
nja ik wou dat dus doen, maar ik snap niet hoe eraan te beginnen
ik dacht gewoon dat dit een .vb file was die je in je app_code zette maar blijkbaar niet, kan iemand me aub zeggen wat ik fout doe?
hier is de code: hij geeft al een fout vanaf de eerste lijn,
eerst zegt hij end of line expected onder de klassenaam en bij : roleprovider zegt hij statement expected

iemand please?

Code:
Imports Microsoft.VisualBasic
Imports System.Web.Security.RoleProvider

Public abstract Class CustomRoleProvider : provider

    public override void Initialize(string name, NameValueCollection config)
        {
'Initialize values from web.config
            if (config == null)
                throw new ArgumentNullException("config");

            if (name == null || name.Length == 0)
                name = "CustomRoleProvider";

            if (String.IsNullOrEmpty(config["description"]))
            {
                config.Remove("description");
                config.Add("description", "Custom Role provider");
            }

' Initialize the abstract base class.
            base.Initialize(name, config);

            foreach (string sK in config.Keys)
            {
				string sV = config.GetValues(sK)[0];
                switch (sK.ToLower())
                {
                    case "description":
                        break;
                    case "applicationname":
                        _ApplicationName = sV;
                        break;
                    case "connectionstringname":
                        _ConnectionStringName = sV;
                        break;
                    case "writeexceptionstoeventlog":
                        _WriteExceptionsToEventLog = Convert.ToBoolean(sV);
                        break;
                    default:
                        throw new ProviderException("Invalid parameter specified: " + sK);
                }
            }

    public override string[] GetRolesForUser(string username)
    {
    List<string> roleNames = new List<string>();
Dim logbll As New LoginBLL
    rolenames.add(logbll.getRoleByUsername(username)
    roleNames.TrimExcess();
    return roleNames.ToArray();
    }


End Class

AsinuS

Legacy Member
dees is er ene van mij, wil in C# dus ipv using pakt ge imports en de : vervangt ge door inherits ;) hf

Code:
using System;
using System.Collections.Generic;
using System.Text;

using System.Web.Security;

using Enquete.Data;
using Enquete.DataAccess;

namespace Enquete.Providers
{
    class EnqueteRoleProvider:RoleProvider
    {
        public override void AddUsersToRoles(string[] usernames, string[] roleNames)
        {
            for (int i = 0; i < usernames.Length; i++)
            {
                GebruikerDA gebruikerDA = new GebruikerDA();
                Gebruiker gebruiker = gebruikerDA.GetGebruikerByUserName(usernames[i]);
                for (int j = 0; j < roleNames.Length; j++)
                {                    
                    RoleDA roleDA = new RoleDA();
                    Role role = roleDA.GetRole_IDByRoleNaam(roleNames[j]);
                    GebruikerRoleDA gebruikerRoleDA = new GebruikerRoleDA();
                    GebruikerRole gebruikerRole = new GebruikerRole();
                    gebruikerRole.Gebruiker_ID = gebruiker.Gebruiker_ID;
                    gebruikerRole.Role_ID = role.Role_ID;
                    gebruikerRoleDA.InsertGebruikerRole(gebruikerRole);
                }
            }
        }

        public override string ApplicationName
        {
            get
            {
                throw new Exception("The method or operation is not implemented.");
            }
            set
            {
                throw new Exception("The method or operation is not implemented.");
            }
        }

        public override void CreateRole(string roleName)
        {
            Role role = new Role();
            role.RoleNaam = roleName;

            RoleDA roleDA = new RoleDA();
            roleDA.InsertRole(role);
        }

        public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
        {
            RoleDA roleDA = new RoleDA();
            roleDA.DeleteRoleByRoleNaam(roleName);
            return true;
        }

        public override string[] FindUsersInRole(string roleName, string usernameToMatch)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public override string[] GetAllRoles()
        {
            RoleDA roleDA = new RoleDA();
            List<Role> roles = roleDA.GetAlleRoles();
            string[] rolesString = new string[roles.Count] ;
            for (int i=0; i<roles.Count; i++)
            {
                rolesString[i] = roles[i].RoleNaam;
            }
            return rolesString;
        }

        public override string[] GetRolesForUser(string username)
        {
            GebruikerDA gebruikerDA = new GebruikerDA();
            Gebruiker gebruiker = gebruikerDA.GetGebruikerByUserName(username);
            GebruikerRoleDA gebruikerRoleDA = new GebruikerRoleDA();
            List<GebruikerRole> gebruikerRoles = gebruikerRoleDA.GetRolesVanGebruiker(gebruiker.Gebruiker_ID);
            string[] rolesForUser = new string[gebruikerRoles.Count];
            for (int i = 0; i < gebruikerRoles.Count; i++)
            {
                int role_ID = gebruikerRoles[i].Role_ID;
                RoleDA roleDA = new RoleDA();
                Role role = roleDA.GetRoleByID(role_ID);
                rolesForUser[i] = role.RoleNaam;
            }
            return rolesForUser;
        }

        public override string[] GetUsersInRole(string roleName)
        {
            RoleDA roleDA = new RoleDA();
            Role role = roleDA.GetRole_IDByRoleNaam(roleName);
            GebruikerDA gebruikerDA = new GebruikerDA();
            List<Gebruiker> gebruiker = gebruikerDA.GetUsersInRole(role.Role_ID);
            string[] usersInRole = new string[gebruiker.Count];
            for (int i = 0; i < gebruiker.Count; i++)
            {
                usersInRole[i] = gebruiker[i].Username;
            }
            return usersInRole;
        }

        public override bool IsUserInRole(string username, string roleName)
        {
            GebruikerDA gebruikerDA = new GebruikerDA();
            Gebruiker gebruiker = gebruikerDA.GetGebruikerByUserName(username);
            RoleDA roleDA = new RoleDA();
            Role role = roleDA.GetRole_IDByRoleNaam(roleName);
            GebruikerRoleDA gebruikerRoleDA = new GebruikerRoleDA();
            bool isUserInRole = gebruikerRoleDA.IsUserInRole(gebruiker.Gebruiker_ID, role.Role_ID);
            return isUserInRole;
        }

        public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
        {
            for (int i = 0; i < usernames.Length; i++)
            {
                GebruikerDA gebruikerDA = new GebruikerDA();
                Gebruiker gebruiker = gebruikerDA.GetGebruikerByUserName(usernames[i]);
                for (int j = 0; j < roleNames.Length; j++)
                {
                    try
                    {
                        RoleDA roleDA = new RoleDA();
                        Role role = roleDA.GetRole_IDByRoleNaam(roleNames[j]);
                        GebruikerRoleDA gebruikerRoleDA = new GebruikerRoleDA();
                        GebruikerRole gebruikerRole = new GebruikerRole();
                        gebruikerRole.Gebruiker_ID = gebruiker.Gebruiker_ID;
                        gebruikerRole.Role_ID = role.Role_ID;
                        gebruikerRoleDA.DeleteGebruikerRole(gebruikerRole);
                    }
                    catch (Exception exception)
                    {
                        throw exception;
                    }
                    
                }
            }
        }

        public override bool RoleExists(string roleName)
        {
            RoleDA roleDA = new RoleDA();
            bool isExistingRole = roleDA.IsExistingRole(roleName);
            return isExistingRole;
        }
    }
}

Arten

Legacy Member
bedankt die heeft al goed geholpe,
ik heb het nu al min of meer aan de praat gekregen, alleen toont hij alle roles en kan ik naar geen enkele pagina navigeren omdat hij op alles dezelfde error geeft:

Key cannot be null.
Parameter name: key

Code:
 Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentNullException: Key cannot be null.
Parameter name: key

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[ArgumentNullException: Key cannot be null.
Parameter name: key]
   System.Collections.Specialized.ListDictionary.get_Item(Object key) +124
   System.Collections.Specialized.HybridDictionary.get_Item(Object key) +75
   System.Web.Security.RolePrincipal.IsInRole(String role) +288
   System.Web.Configuration.AuthorizationRule.IsTheUserInAnyRole(StringCollection roles, IPrincipal principal) +166
   System.Web.Configuration.AuthorizationRule.IsUserAllowed(IPrincipal user, String verb) +393
   System.Web.Configuration.AuthorizationRuleCollection.IsUserAllowed(IPrincipal user, String verb) +263
   System.Web.Configuration.AuthorizationSection.IsUserAllowed(IPrincipal user, String verb) +45
   System.Web.Security.UrlAuthorizationModule.OnEnter(Object source, EventArgs eventArgs) +285
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +167
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +117
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan