asmodie skrev:
Jag ska ta och göra en djupdykning i FormAuth när jag får tid. Men det låter mycket intresant.
Hur lösern ni problemet med att man vill ha olika användargrupper?
Det är klurigt tycker jag, men för tillfället har jag löst det på följande vis:
1. Varje användare är kopplad till en eller flera grupper.
2. Varje grupp är kopplad till en applikation med en viss rättigheter. Jag har skapat fem olika rättighetsnivåer: ingen, läsa, skribent, redaktör och administratör. Namnet säger sig nästan självt.
Låt säga att användaren "Berra" loggar in. Han är kopplad till användargrupperna "Nyhetsredaktör" och "Artikelskribent". Dessa två grupper är kopplade till applikationerna "Nyheter" (med rättigheten "redaktör") respektive "Artiklar" (rättigheten "skribent"). Alltså, Berra är redaktör för nyheter och skribent för artiklar. På så vis styrs vad han kan göra med nyheterna eller artiklarna.
asmodie skrev:
Men vad är det som gör Forms Authentication är bättre att starta en egen session som man kan välja precis vad man vill ha med och sedan inkludera ett script på varje sida som kollar rättigheterna och redirectar om folk?
Forms Authentication jag fattar inte riktigt vart man väljer om en användare får gå in på en sida eller inte? Kan de bara kolla om den personen är inloggad eller inte? Men den kan väll inte urskilja vilken användare som får gå in på vilken sida?
Stämmer. FormsAuth kollar bara så att du är inloggad. Är du inte det så skickas du till en inloggningssida.
Men fördelen med ett objektorienterat språk är ju att det går att ändra objekt själv så att det passar dina behov! Så här ser exempelvis en vanlig sida ut på mitt intranät:
[b]VB[/b]
Imports ...
Imports VoodooFilm.Intranet
Public Class Frontpage : Inherits PageBase.StandardPage
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Init
Me.PageTitle = "Startsidan"
End Sub
End Class
[b]C#[/b]
Import ...;
Import VoodooFilm.Intranet;
public class Frontpage : PageBase.StandardPage
void Page_Init(System.Object sender, System.EventArgs e)
[red]Handles MyBase.Init = vet jag inte översättningen till ;)[/red]
this.PageTitle = "Startsidan";
}
}
Mer kod behöver jag inte för att skapa en sida som bara vissa grupper har åtkomst till. I "StandardPage" sköts all logik. Exempelvis räcker det med raden Me.PageTitle = "Startsidan" för att sätta rubriken på sidan. Mallar och dylikt laddas automatiskt via StandardPage-klassen.
Vad gäller kontroll av behörighet så kontrolleras att användaren är inloggad (automatiskt via FormsAuth), sedan kontrolleras vem som är inloggad (hämta ID-nummer), och slutligen om användaren har behörighet till sidan (jämför användarens ID-nummer med användagrupperna som är kopplade till applikationen).
Detta sker I "StandardPage" som är en ärvd till min aspx-sida (som i sin tur är ärvd från System.Web.UI.Page). På detta vis slipper jag se all kod om vilken sida man har behörighet till och kan koncentrera sig på det väsentliga i stället - att visa det som ska visas på startsidan. ;)