Avatar billede frydenholm Nybegynder
10. juli 2007 - 22:12 Der er 6 kommentarer og
1 løsning

asp.net 2.0 menu og securitytrimming

Jeg forsøger at få securitytrimming til at virke så min menu, der er opbygget ud fra et sitemap viser menupunkterne afhængig af den påloggede brugers rolle. Jeg har kigget i lignende spørgsmål her på sitet men har ikke kunnet få det til at virke.

Jeg har 2 sitemap filer - en til det "offentlige site" hvor securitytrimming ikke er enabled, og så en admin.sitemap.

Min web.config i roden af sitet har følende:
<roleManager enabled="true" defaultProvider="AccessRoleProvider" cacheRolesInCookie="false" cookieName=".ASPXROLES" cookieTimeout="30" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All">
      <providers>
        <add name="AccessRoleProvider" type="Samples.AccessProviders.AccessRoleProvider, AccessProviders" connectionStringName="AccessFileName" applicationName="RBK" />
      </providers>
    </roleManager>
       
    <siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
      <providers>
        <add name="XmlSiteMapProvider" description="Default SiteMap provider." type="System.Web.XmlSiteMapProvider" siteMapFile="Web.sitemap" securityTrimmingEnabled="false" />
        <add name="AdminXmlSiteMapProvider" description="Admin SiteMap provider." type="System.Web.XmlSiteMapProvider" siteMapFile="admin.sitemap" securityTrimmingEnabled="true" />
      </providers>
    </siteMap>

Og i admin.sitemap er der bl.a. følgende:
<siteMapNode url="~/admin/default.aspx?id=home" title="Home"  description="Startside" roles="*">
<siteMapNode url="~/admin/default.aspx?id=brugere" title="Brugere"  description="Vælg et underpunkt for at administrere Brugere" roles="admin" >
      <siteMapNode url="~/admin/brugeradm/opretbruger.aspx" title="Opret bruger"  description="Opret en bruger til systemet" roles="admin"/>
    </siteMapNode>
  </siteMapNode>

Jeg har 2 testbrugere - den ene i rollen admin, og den anden i rollen editor. Men begge brugere kan fint se de menupunkterne hvor roles="admin" er angivet.

I mappen admin har jeg også en web.config der indeholder følgende:
<authorization>
    <allow roles="admin,editor"/>
    <deny users="*"/>
</authorization>

Udfra de spørgsmål jeg ellers har fundet om securitytrimming har jeg også prøvet i web.config i roden at tilføje følgende uden held
<location path="~/admin/brugeradm/opretbruger.aspx">
    <system.web>
    <authorization>
      <allow roles="admin"/>
      <deny roles="editor"/>
    </authorization>
    </system.web>
</location>

Sig endelig til hvis der mangler flere informationer.
Selv hvis tricket med location path kan komme til at virke (det kan jo være jeg har glemt en detalje et sted) vil jeg være lidt træt af at proppe ekstra authorization på hver fil under admin for at sortere menupunkterne fra (selvom jeg formoder at det så giver den ekstra grad af sikkerhed at en forkert rolle slet ikke kan loade siden i stedet for kun at skjule menupunktet for en rolle!? Men det at skjule menupunktet er sikkerhed nok i dette tilfælde).

Er det muligt at lave en databinding metode når menuen opbygges, hvor jeg så selv kan tjekke på om brugerens rolle er i listen af roller angivet for menupunktet i admin.sitemap? Hvis ja, er der så en der kan lave et hurtigt C# eksempel?
Avatar billede snepnet Nybegynder
12. juli 2007 - 11:54 #1
Når du angiver sådan her i din konfigurationsfil
<authorization>
    <allow roles="admin,editor"/>
    <deny users="*"/>
</authorization>
medfører det at både admin's og editor'er kan se hvad der ligger i mappen, hvilket medfører at du får vist menupunkterne, så det er som det skal være.
Hvis du slår securitytrimming til skal du ikke begynde at angive noget i dit sitemap - med mindre det går på tværs af det securitytrimming ville gøre.
Så i dit tilfælde - sørg for at editor's ikke har adgang til admin-mappen:
<authorization>
    <allow roles="admin"/>
    <deny users="*"/>
</authorization>

Og fjern rollerne fra dit sitemap:
<siteMapNode url="~/admin/default.aspx?id=home" title="Home"  description="Startside" roles="*">
<siteMapNode url="~/admin/default.aspx?id=brugere" title="Brugere"  description="Vælg et underpunkt for at administrere Brugere" >
      <siteMapNode url="~/admin/brugeradm/opretbruger.aspx" title="Opret bruger"  description="Opret en bruger til systemet" />
    </siteMapNode>
  </siteMapNode>

Og tjah... Så vær sikker på at du er logget ind som det der var planen ;o)

Mvh
Avatar billede frydenholm Nybegynder
12. juli 2007 - 17:54 #2
Det er nok lidt dårlig navngivning, men både brugere i rollen admin og editor kan logge ind og tilgå sider i admin mappen.
Der er dog forskel på hvilke menupunkter de skal have i "admin-menuen" - rollen editor kan f.eks. oprette og redigere nyheder, mens admin-rollen kan se menupunkter vedr. oprettelse af brugere samt tilknytning af roller.

Så det går ikke at jeg fjerner editor fra "allow roles" - jeg ønsker kun at differentiere på hvilke menupunkter de respektive roller kan se når de er logget ind.
Avatar billede snepnet Nybegynder
13. juli 2007 - 12:13 #3
Hvis du vil udnytte automatiseringen (securityTrimmingEnabled="true") burde du jo strukturere dine sider i foldere der modsvarer dine roller.... Ellers må du bare slå det fra, og skrive det manuelt ind i dit sitemap.
Mvh
Avatar billede frydenholm Nybegynder
13. juli 2007 - 12:30 #4
Jeg har godt nok overvejet det med undermapperne - og det kan også let tænkes det bliver løsningen. Jeg vil lige prøve at lave et par forsøg med det.

Men jeg synes også jeg har set et eksempel hvor en Menu_Itemdatabinding metode tjekkede på om den påloggede var i en af de roller der var angivet i menupunktet i sitemap - og hvis ikke det var tilfældet blev menupunktet ikke vist.
Men jeg har ikke lige kunnet finde eksemplet - er der en der har sådan et eksempel i C#?

Tak for svar indtil videre Snepnet. Jeg er lidt i tvivl om hvad du mener med at skrive det manuelt ind i sitemap?
Avatar billede snepnet Nybegynder
13. juli 2007 - 13:34 #5
Det er bare som du allerede har gjort (roles="admin" på en sitemapnode).
Der er ikke det store i det du skriver om... Du kan se et eksempel her http://www.joeaudette.com/sitemapproviderexternallink.aspx, men det bliver hurtigt lidt irreterende hvis du kontinuerligt skal rette i koden når du tilføjer brugere - og systemet virker jo for så vidt ok som standard.
Mvh
Avatar billede frydenholm Nybegynder
13. juli 2007 - 14:21 #6
Jeg har vist nok til at komme videre med en løsning nu - om det bliver løsningen med undermapper eller om jeg sorterer fra med en itemdatabinding ved jeg ikke helt endnu - nu vil jeg prøve at rode lidt begge løsninger og se hvad jeg synes virker bedst til det behov jeg har.

Tak for hjælpen snepnet - smit et svar så får du point.
Avatar billede snepnet Nybegynder
16. juli 2007 - 11:30 #7
Et svar kommer her :o)
Held og lykke med det.
Mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester