关于用户权限设置的问题?真的是求你们了!!!!在线等!!!

qqyzq 2004-06-21 06:06:38
我一真对这个权限设置问题没有搞明白。一个程序里有很多个模块(功能按钮)。如去设置每一个用户有哪些权限。要实现这一功能我不知该从何下手。哪位好心人可以给个完整的代码啊。连同数据库及设置也有。也只是给一个完整的关于设置用户权限的功能的vb.net的工程。我先谢谢了。
...全文
337 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zooo 2004-06-22
  • 打赏
  • 举报
回复
学习!
qqyzq 2004-06-22
  • 打赏
  • 举报
回复
多谢各位了,我先试试看行不行。太多了。真的有点看不明白。我刚学习不久...
水如烟 2004-06-21
  • 打赏
  • 举报
回复
本人是这样做的
大方面的权限设置由服务器总揽
程序功能模块的设置如下

1、授权项目表

授权项目ID 授权项目
1 工资项目编辑
2 工资编辑审核
3 工资审核
4 工资取消审核
5 人事项目编辑
6 新建工资

2、授权表

授权ID 用户 授权项目ID
1 fkdl\master 1,2,3,4,5,6
2 fk-a09-05\master 1,2,3,4,5,6
3 fkdl\fkliangxf 1,2,6
4 fkdl\fklunjh 1,3,5
5 fkdl\fkliap 5
6 fkdl\Administrator 1,2,3,4,5,6
7 fkdl\fklihj 5

3、判断授权的存储过程
CREATE PROCEDURE tmp_判断授权 @用户 nvarchar(20),@授权项目 nvarchar(20),@通行 bit OUTPUT
AS
DECLARE @Sql nvarchar(300)
DECLARE @用户项目ID nvarchar(20)
SELECT @用户项目ID=授权项目ID FROM o_授权表 WHERE 用户=@用户
IF @用户项目ID IS NULL
BEGIN
SELECT @通行=0
RETURN
END
SELECT @Sql='SELECT * FROM o_授权项目表 WHERE 授权项目='''+@授权项目+''' AND 授权项目ID IN ('+@用户项目ID+')'
EXECUTE (@Sql)
IF @@ROWCOUNT=0
SELECT @通行=0
ELSE
SELECT @通行=1

4、判断某一项目的操作权限
Public Shared Function IsAuth(ByVal User As String, ByVal AuthItem As String) As Boolean
Dim cm As New LzmTw.Data.Command
With cm.DBCommand
.CommandText = "dbo.[tmp_判断授权]"
.CommandType = System.Data.CommandType.StoredProcedure
.Parameters.Add(New System.Data.SqlClient.SqlParameter("@RETURN_VALUE", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.ReturnValue, False, CType(0, Byte), CType(0, Byte), "", System.Data.DataRowVersion.Current, Nothing))
.Parameters.Add(New System.Data.SqlClient.SqlParameter("@用户", System.Data.SqlDbType.NVarChar, 20))
.Parameters.Add(New System.Data.SqlClient.SqlParameter("@授权项目", System.Data.SqlDbType.NVarChar, 20))
.Parameters.Add(New System.Data.SqlClient.SqlParameter("@通行", System.Data.SqlDbType.Bit, 1, System.Data.ParameterDirection.Output, False, CType(0, Byte), CType(0, Byte), "", System.Data.DataRowVersion.Current, Nothing))
.Parameters("@用户").Value = User
.Parameters("@授权项目").Value = AuthItem
If cm.DBConnction.State <> ConnectionState.Open Then cm.DBConnction.Open()
cm.DBCommand.ExecuteNonQuery()
cm.DBConnction.Close()
Return CType(.Parameters("@通行").Value, Boolean)
End With
End Function

5、菜单也好,控件也好,功能模块也罢,就看IsAuth是否True了

不怕露丑贴出来,供大家品足。
ponycsdn 2004-06-21
  • 打赏
  • 举报
回复
我自己写的一篇文章可以参考
http://cn.thespoke.net/MyBlog/pony/MyBlog.aspx
把日历翻到5月
starofspace@hotmail.com

权限设计实在是让我好好的享受过一阵痛苦,我不得不好好思考表和表之间的关系。在我刚开始学习写站点的时候我使用了“站点高级编程”的方法。表之间的关系和后面的存储过程让我头晕目眩。我是体会了“书到用时方恨少”这句古话,挫折和打击接踵而至(难道这么多年的书都让我读到厕所里面,排泄掉了?)。后来发现使自己搞了一个难题入门,我那叫一个“悔”。

权限设计的两种方法的比较

1、《ASP.NET Portal Starter Kit》使用的方法:角色——用户

2、《站点高级编程》使用的方法:许可分类——许可——角色——用户



具体的实现方法:

1、《ASP.NET Portal Starter Kit》使用的方法:角色——用户

角色表:RoleID、RoleName两个字段

用户表:UserID、UserName、Email、PassWord

用户角色对应表(体现用户和角色之间多对多的关系):UserID、RoleID



2、《站点高级编程》使用的方法:许可分类——许可——角色——用户

许可分类表:PermissionCatalogID、PermissionCatalogDes

许可表:PermissionID、PermissionDes、PermissionCatalogID

上面两个表明显存在一对多的关系(一个分类对应多个许可)

角色表:RoleID、RoleDes

角色许可对应表(体现角色和许可之间的多对多关系):RoleID、PermissionID

用户表:UserID、Monicker、UserName、PassWord、Email、Postalcode、Address、Phone、Mobile

用户角色对应表(体现用户和角色之间的多对多关系):UserID、RoleID



分析:

1、就复杂度而言显而易见《ASP.NET Portal Starter Kit》比《站点高级编程》要简单得多。

2、就实现功能作以下讨论:

(1)、分配权限给用户的方式:

《ASP.NET Portal Starter Kit》使用直接给用户分配角色,应用程序以“角色”作为基本权限单位进行分配。

《站点高级编程》同样给用户分配角色,但是角色并不是最小权限单位。在这个解决方案中“许可”(permission)是最小的权限单位。应用程序最终还是要根据“许可”来鉴别用户权限的高低。

(2)、实现权限分配差别

《ASP.NET Portal Starter Kit》:一个用户可以同时持有多种角色,也就是多种权限。也必须持有多种角色才能拥有多种权限。

《站点高级编程》:用户持有一种角色,但是同时却可能拥有多种权限。拥有多种角色拥有多种权限。

(3)、给一个(一类)用户分配多个权限的方式

《ASP.NET Portal Starter Kit》:由于以“角色”作为基本权限单位,在给一个(一类)用户分配权限的时候只能是找到这个用户并且把“角色”逐个分配给此用户权限。

《站点高级编程》:由于“许可”是基本权限单位,“角色”和许可之间存在“多对多”的关系。可以用“角色”来封装多个许可,因而可以新建一个“角色”并且给此“角色”添加多个许可。在给一个(一类)用户分配权限的时候可以直接给此用户添加这个“角色”即可。



结论:

在使用权限设计时候要搞清楚需求。

《站点高级编程》显然更适合大型、多模块的站点,并且有相当多的登录用户和不同权限的“管理员”。其权限分配模式有些类似windows。

《ASP.NET Portal Starter Kit》更加适合一般网站,管理员并不多(登录人员成分不很复杂)的情况。其登录模式比较简单。
gesnpt 2004-06-21
  • 打赏
  • 举报
回复
给每个模块一个ID,然后把ID赋给每个用户,在用户登陆的时候根据用户ID找到用户相应的权限,动态的将模块的链接加载到页面,这样就可以了,比较简单的方法。

16,549

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧