判断用户权限时,将“权限编码”直接写到程序中,是规范的设计吗?
-------------------------
要进行用户权限的管理,必定要有一个权限表,一个用户对应相应的一组权限,用户对数据表进行添加删除修改时,要进行权限验证时,直接将权限编码写入到程序代码中,是规范的设计吗?
比如用户名与对应权限的编码表如下:
用户名,权限,权限名称
001,aaa,入库查询
001,bbb,出库查询
001,ccc,统计汇总
002,aaa,入库查询
003,bbb,出库查询
那么判断用户001是否有出库查询时,用户名是存在一个变量中的,比如登录时,将用户名存在变量user中,
即 user="001",
我就要判断001用户是不是具有bbb权限,这样可以吗?关键是"bbb",是否可以直接写入到代码中,
我认为这不太合理,因为这样就将数据库中的权限表定死了,权限表一改,程序就不适用了。但是,如果不将权限码写到程序中,我也找不到判断的办法呀?
-------------------------
要进行用户权限的管理,必定要有一个权限表,一个用户对应相应的一组权限,用户对数据表进行添加删除修改时,要进行权限验证时,直接将权限编码写入到程序代码中,是规范的设计吗?
比如用户名与对应权限的编码表如下:
用户名,权限,权限名称
001,aaa,入库查询
001,bbb,出库查询
001,ccc,统计汇总
002,aaa,入库查询
003,bbb,出库查询
那么判断用户001是否有出库查询时,用户名是存在一个变量中的,比如登录时,将用户名存在变量user中,
即 user="001",
我就要判断001用户是不是具有bbb权限,这样可以吗?关键是"bbb",是否可以直接写入到代码中,
我认为这不太合理,因为这样就将数据库中的权限表定死了,权限表一改,程序就不适用了。但是,如果不将权限码写到程序中,我也找不到判断的办法呀?
比如用户名存在变量 struser中了,即 struser="001"
"select *
from 权限表
where 用户名= '" & struser & "' and 权限码='aaa'"这样返回一个记录集,如果记录集没有记录,则说明用户没有这个权限,如果有记录,说明用户有些权限。这样可以实现需求,但是,权限码aaa写死了,所以我问问这样设计是否合规范。
则:if exists(select 1 from 权限表 where 用户名=@struser and 权限码='aaa')
begin
--adsfasdf.........
end
@userid int,
@progid nvarchar(30)
AS
DECLARE @RET INTEGER
DECLARE @USERNAME NVARCHAR(20)SELECT @USERNAME=F姓名 FROM T操作员 WHERE FID=@USERIDIF @USERNAME='维护员'
select @ret = 0
else
BEGIN
if exists(
select dbo.T操作员权限.操作员ID
FROM dbo.T操作员权限 INNER JOIN
dbo.T操作员 ON dbo.T操作员权限.操作员id = dbo.T操作员.fid INNER JOIN
dbo.T权限分配 ON dbo.T操作员权限.权限组id = dbo.T权限分配.权限组id INNER JOIN
dbo.T权限 ON dbo.T权限分配.权限id = dbo.T权限.fid
WHERE DBO.T操作员权限.操作员ID=@USERID AND RTRIM(DBO.T权限.f权限名称)=RTRIM(@PROGID) and f状态 = 1)
select @ret=0
else
select @RET=1
END
return @RET
GO