Asp.Net - Extendiendo Membership Access
Por otra parte existen algunos puntos de la licencia MS SQL Express Edition que no me gustan, y en realidad crear un archivo .mdf puede hacerse desde el mismo Control Panel de Windows, sin necesidad de tener instalado MS Access.
Total que como no quiero usar MS SQL, obtuve el Sample Access Provider Starter Kit que se puede obtener de microsoft msdn starter kits, el cual contiene una base de datos de MS Access (En otro articulo platicare como instalar esta base de datos).
Ahora bien, la tabla que modifique es aspnet_Membership, agregue un campo llamado "Theme", el tipo de datos que le puse es "Texto" con un tamaño de 50 caracteres. En SQL seria un varchar(50).
Una vez que se hizo la modificación de la base de datos de MS Access, lo siguiente es código. Lo primero es modificar el web.config, agregar la cadena de conexion para que sea mas sencillo, dentro del Tag de
< providername="System.Data.OleDb" connectionstring="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\Webs\MedSid\App_Data\ASPNetDB.mdb" name="AccessFileNameString">
A continuacion modifique la pagina default.aspx y agregue en la parte del codigo de < runat="server">:
Dim drTema As System.Data.OleDb.OleDbDataReader
drTema = obtenTema()
While drTema.Read()
Session("Theme") = drTema("Theme") 'Se coloca el tema en una variable de sesion
End While
' Se obtiene el tema precisamente de la variable de sesion, en caso de no tener ningun tema se muestra el tema default, que en este caso es MedSid
Dim ThemeName As String
ThemeName = Session("Theme")
If ThemeName <> Nothing Then
Page.Theme = ThemeName
Else
Page.Theme = "MedSid"
End If
Function obtenTema() As System.Data.IDataReader
Dim connectionString As String = System.Configuration.ConfigurationManager.ConnectionStrings("AccessFileNameString").ConnectionString.ToString
Dim dbConnection As System.Data.IDbConnection = New System.Data.OleDb.OleDbConnection(connectionString)
Dim queryString As String = "SELECT aspnet_Membership.Theme " & _ "FROM aspnet_Membership"
Dim dbCommand As System.Data.IDbCommand = New System.Data.OleDb.OleDbCommand
dbCommand.CommandText = queryString
dbCommand.Connection = dbConnection
dbConnection.Open()
Dim dataReader As System.Data.IDataReader = dbCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection)
Return dataReader
End Function
De esta manera modificamos la tabla de membeship de manera muy sencilla y asi se vuelve un poco mas útil esta base de datos, y no sólo para el control de los permisos en nuestro sitio web.
Listo!
Comentarios
existe una explicacion de como usar membership en otras bases de datos, el ejemplo es para Mono y PostgreSQL. Pero creo que puede ayudarte.
Listo!
En caso de ser así, existe alguna plantilla predefinida para SQL server donde pueda cambiar la cadena de conexion e indicar las tablas que seran las que usare para los usuarios y roles?
A que te referís con eso? Es que acaso no puedo usar cualquier tabla ?
Porfa explicame un poquito más eso.
Si lo anterior es correcto, en realidad ya tienes un esquema de seguridad implementado. Por lo cual no se hace practico usar los controles intrínsecos a membership, como login, wizard account, etc.
Creo que tienes 2 opciones:
1.- Tienes que construir tu objetos de negocios para estos procedimientos de seguridad. Puedes usar algunos controles provenientes de membership, pero de forma muy limitada.
2.- Por otra parte, puedes instalar membership en tu sql server, y crear un store procedure que agregue los datos de las tablas de membership a tu bdcommerce.
En cualquier caso te recomiendo le des una revisada a la libreria de MSDN "How to: Implement a Custom Membership User " http://msdn2.microsoft.com/en-us/library/ms366730.aspx
Si es una aplicación que estas creando, te recomiendo que partas de las tablas de membership para evitar tener posiblemente 2 tablas de usuarios.
Que es precisamente lo que pretende este blog, es decir ya una vez que tienes membership en tu aplicacion, agregale algunas opciones extras, digamos apellido materno, una DireccionID, etc, a las tablas, para luego colocar en la misma base de datos o en su caso en el mismo servidor las tablas de un carrito de compras, catalogo, tasks, etc.
Me interesa mucho el tema de los roles, y quiero q mi aplicación web, al momento de iniciar sesión detecte a que rol pertenece el usuario y pueda ingresar a ciertas páginas asignas, se muy bien que el membership está destinado para esto, pero que sucede con aquellos que ya tenemos una aplicación creada y queremos acoplar esto?
Que me sugieres??
Dejar que membership administre tus usuarios y mediante algunos store procedures mantener normalizada tu base de bdcommerce
yo vi que en otra página hacían lo mismo pero en ves de ponerlo en la tabla lo ponían en el web.config