Modificar en función de los permisos de un usuario.

03/01/2004 - 14:16 por Adam Viussà | Informe spam
Os presento esta procedure que, en función de los permisos de un usuario, se
modificaran los campos en los que el usuario tenga permiso y, se devolverá
un String con los nombres de campo que el usuario no tenga permiso...

Al principio creo que està bién pero no me convence el final de ir
comentando campo por campo de la tabla.
Por esto quería interntarlo hacer con la Stored Procedure de sistema
"SP_SPKEYS" que retorna los campos
que son PK y, de esta forma hacer un cursor solo con las Columnas que no son
PK para poder comprobar
si el usuario pueder hacer UPDATE o no...

haber como lo veis...

Gracias.
/*
Esta tabla indica los bits utilizados para los permisos de
objetos quese devuelven cuando sólo se especifica objectid.
Bit(dec) Bit(hex) Permiso de la instrucción
1 0x1 SELECT ALL
2 0x2 UPDATE ALL
4 0x4 REFERENCES ALL
8 0x8 INSERT
16 0x10 DELETE
32 0x20 EXECUTE (sólo procedimientos)
4096 0x1000 SELECT ANY (al menos una columna)
8192 0x2000 UPDATE ANY
16384 0x4000 REFERENCES ANY
Esta tabla muestra los bits utilizados para los permisos de
objeto en lo referente a columnas, devueltos cuando se
especifican objectid y también column.
Bit(dec) Bit(hex) Permiso de la instrucción
1 0x1 SELECT
2 0x2 UPDATE
4 0x4 REFERENCES
*/
CREATE PROCEDURE [dbo].[MNU_OPCIONS_M]
@permisos VARCHAR(512) OUTPUT,
@id_gestio INT,
@id_mnu INT,
@p_id_gestio INT,
@p_id_mnu INT,
@apareix_a_fitxa INT,
@apareix_a_mnu INT,
@win_frm_accio VARCHAR(256),
@web_frm_accio VARCHAR(256)
AS
DECLARE @TAULA VARCHAR(512)
DECLARE @SEL VARCHAR(500)
SET @TAULA = 'MNU_OPCIONS'
IF PERMISSIONS(OBJECT_ID(@TAULA)) & 0x2 = 0x2
BEGIN
UPDATE a
SET a.p_id_gestio = @p_id_gestio,
a.p_id_mnu = @p_id_mnu,
a.apareix_a_fitxa = @apareix_a_fitxa,
a.apareix_a_mnu = @apareix_a_mnu,
a.win_frm_accio = @win_frm_accio,
a.web_frm_accio = @web_frm_accio
FROM [dbo].[MNU_OPCIONS] AS a
WHERE a.id_gestio = @id_gestio
AND a.id_mnu = @id_mnu
SET @permisos = ''
RETURN
END
ELSE
IF PERMISSIONS(OBJECT_ID(@TAULA)) & 0x2000 = 0x2000
BEGIN
SET @SEL = 'UPDATE a SET '
SET @permisos = ''
IF PERMISSIONS(OBJECT_ID(@TAULA),'p_id_gestio') & 0x2 = 0x2
SET @SEL = @SEL + 'a.p_id_gestio = ' + CAST(@p_id_gestio AS VARCHAR) +
', '
ELSE
SET @permisos = @permisos + 'p_id_gestio,'
IF PERMISSIONS(OBJECT_ID(@TAULA),'p_id_mnu') & 0x2 = 0x2
SET @SEL = @SEL + 'a.p_id_mnu = ' + CAST(@p_id_mnu AS VARCHAR) + ', '
ELSE
SET @permisos = @permisos + 'p_id_mnu,'
IF PERMISSIONS(OBJECT_ID(@TAULA),'apareix_a_fitxa') & 0x2 = 0x2
SET @SEL = @SEL + 'a.apareix_a_fitxa = ' + CAST(@apareix_a_fitxa AS
VARCHAR)+ ', '
ELSE
SET @permisos = @permisos + 'apareix_a_fitxa,'
IF PERMISSIONS(OBJECT_ID(@TAULA),'apareix_a_mnu') & 0x2 = 0x2
SET @SEL = @SEL + 'a.apareix_a_mnu = ' + CAST(@apareix_a_mnu AS
VARCHAR)+ ', '
ELSE
SET @permisos = @permisos + 'apareix_a_mnu,'
IF PERMISSIONS(OBJECT_ID(@TAULA),'win_frm_accio') & 0x2 = 0x2
SET @SEL = @SEL + 'a.win_frm_accio = ''' + @win_frm_accio + ''', '
ELSE
SET @permisos = @permisos + 'win_frm_accio,'
IF PERMISSIONS(OBJECT_ID(@TAULA),'web_frm_accio') & 0x2 = 0x2
SET @SEL = @SEL + 'a.web_frm_accio = ''' + @web_frm_accio + ''', '
ELSE
SET @permisos = @permisos + 'web_frm_accio,'
IF @SEL = 'UPDATE a SET '
GOTO ACCES_A_RES
SET @SEL = LEFT(@SEL,LEN(@SEL)-1)
SET @permisos = LEFT(@permisos,LEN(@permisos)-1)
SET @SEL = @SEL + ' FROM [dbo].[' + @TAULA + '] AS a '
SET @SEL = @SEL + ' WHERE a.id_gestio = ' + CAST(@id_gestio AS VARCHAR)
SET @SEL = @SEL + ' AND a.id_mnu = ' + CAST(@id_mnu AS VARCHAR)
EXECUTE (@SEL)
RETURN
END
ELSE
GOTO ACCES_A_RES
ACCES_A_RES:
SET @permisos 'p_id_gestio,p_id_mnu,apareix_a_fitxa,apareix_a_mnu,win_frm_accio,web_frm_ac
cio'
RETURN
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

Preguntas similare

Leer las respuestas

#6 Adam Viussà
03/01/2004 - 17:25 | Informe spam
mi mail es

gracias de antemano...
eres lo mejor que me ha pasado...
almenos queda alguien que sabe de verdad SQL y su verdadera topologia de
aplicaciones.


"Maximiliano Damian Accotto" <maxi_accotto[arroba]speedy[.]com[.]ar>
escribió en el mensaje news:
:-), feliz año.

disculpa que te haya dicho eso pero pasa lo siguiente:

Vos suponete q armas un sistema de gestion que vas a vender a mi empresa y
cuando lo pongo descubro que desde un Excel hay acceso, la verdad que tu
sistema no pasaria las pruebas de control de calidad y no solo eso sino


que
no seria nada agradable que desde un Excel te saquen los datos verdad?

si te interesa tengo un documento de como usar las funciones de


aplicacion,
de ser asi pasame el mail y te lo envio sin costo alguno ;-)



Salu2

Maximiliano Damian Accotto
Gerente de IT
Fundicion San Cayetano S.A.
Buenos Aires Argentina
-
maxi_accotto[arroba]speedy[.]com[.].ar
MSN:



"Adam Viussà" escribió en el mensaje
news:
> Hostia... pues si... tienes razón. No había caido en ello.
>
> Gracias y feliz año nuevo.
>
>


Respuesta Responder a este mensaje
#7 Maximiliano d. Accotto
04/01/2004 - 03:09 | Informe spam
Epa no sera mucho ;-) creo que en este foro exactamente es donde mas
personas encontre que saben y mucho de Sql.

Salu2

Luego te paso el doc


"Adam Viussà" escribió en el mensaje
news:%
mi mail es

gracias de antemano...
eres lo mejor que me ha pasado...
almenos queda alguien que sabe de verdad SQL y su verdadera topologia de
aplicaciones.


"Maximiliano Damian Accotto" <maxi_accotto[arroba]speedy[.]com[.]ar>
escribió en el mensaje news:
> :-), feliz año.
>
> disculpa que te haya dicho eso pero pasa lo siguiente:
>
> Vos suponete q armas un sistema de gestion que vas a vender a mi empresa


y
> cuando lo pongo descubro que desde un Excel hay acceso, la verdad que tu
> sistema no pasaria las pruebas de control de calidad y no solo eso sino
que
> no seria nada agradable que desde un Excel te saquen los datos verdad?
>
> si te interesa tengo un documento de como usar las funciones de
aplicacion,
> de ser asi pasame el mail y te lo envio sin costo alguno ;-)
>
>
>
> Salu2
>
> Maximiliano Damian Accotto
> Gerente de IT
> Fundicion San Cayetano S.A.
> Buenos Aires Argentina
> -
> maxi_accotto[arroba]speedy[.]com[.].ar
> MSN:
>
>
>
> "Adam Viussà" escribió en el mensaje
> news:
> > Hostia... pues si... tienes razón. No había caido en ello.
> >
> > Gracias y feliz año nuevo.
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida