Yo por ejemplo guardo en una variable de sesion el tipo de usuario.
Ejemplo:
1 = Avanzado
0 = Basico
Cuando el usuario se logea, obtengo de la BD el tipo de usuario para el usuario actual.
Session("IdTipoUsuario") = login.idTipoUsuario(idUsuario)
-----
Login, es ua clase que logea al usuario, y ademas implementa otras funcionalidades. Por ejemplo, recuperar el Id del Tipo de Usuario, pasando como parametro el Id del Usuario
---------
De esta manera logro asignar el tipo de usuario a la variable de sesion.
Ahora, cuando necesito evaluar algo por tipo de usuario, solo acceso a la variable de sesion.
msgbox("Tipo de Usuario: " & session("IdTipoUsuario")
Tambien podemos asignarlo a una variable.
dim tUsuario as integer = session("IdTipoUsuario")
select case tUsuario
........
........
Ahi es donde debes evaluar y hacer lo que necesites con el gridView.
Por ejemplo:
Si tUsuario = 1
GridView.Columns(0).Visible=True
Si tUsuario = 2
GridView.Columns(0).Visible=False
Con eso puedes ocultar columnas.
Puedes hacelo para filas... etc.
Si los botones estan en el encabezado o pie, debes usar el metodo findControl del GridView, a fin de que puedas acceder a sus propiedades.
Si lo que deseas manipular esta en las filas, puedes hacerlo pasando como parametro el valor 0 o 1 (false / true) en la sentencia SELECT, de manera que despues ese valor, que mandaste de entrada, lo uses en la salida, como valor para lapropiedad enabled del control.
Supongamos que muestras ID, Nº FACTURA, MONTO de la tabla faturas.
El Select es: SELECT Num, Factura, Monto FROM Factura
Pero deseas que el boton ELIMINAR de cada fila este bloqueado para usuarios basicos (0) y habilitado para usuarios avanzados (1), haces lo sgte.
SELECT Num, Factura, Monto, @Eliminar as Eliminar FROM Factura
Hemos agregado un parametro de entrada, el valor de dicho parametro lo configuras como:
Tipo: Session (Variable)
Valor: IdTipoUsuario
Como el tipo de usuario solo puede ser Avanzado=1 o Basico=0, el valor solo podra ser Verdadero o Falso.
Despues en tu grid view, conviertes en plantilla la columna que tendra el boton eliminar, y en databind (no me acuerdo bien, pero es donde se le asigna el valor a las propiedades del control), le asignas a la propiedad Enabled del boton, en valor que obtendras de la consulta; esto es, el campo Eliminar.
Dicho campo eliminar, lo unico que hace es asignar el valor del idTipoUsuario a cada fila de las consulta.
Otra manera es ir evaluando por cada fila que se va creando, pero creo que es mas perjudicial en cuando a rendimiento.
Saludos