■■■■■■复杂的权限管理是如何实现的?高分请教,不够再加啊。

laosan 2003-02-21 08:53:17
比如
某个页面只能某个有权限的人才能进入,
或者属于某个工作组的人才能进入,
或者某个职位的人才能进入,
或者拥有其他某个特定属性的人才能进入?

所以把人分为下面
个人,工作组,职位,其他属性
这样怎么样实现啊?
...全文
75 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
gleaf 2003-04-16
  • 打赏
  • 举报
回复
很象是那么回事么,士别三日当刮目相看啊!

注意搞清楚这些实体之间的对应关系。

至于上面九指神乞的说法我也不完全同意。集中在用户组的问题上。

我觉得用户组更多代表的是组织机构的概念,如果是纯粹的权限管理的话,是用不上的。不知道九指神乞是否同意。
rlx 2003-04-01
  • 打赏
  • 举报
回复
有关用户权限的七个表(初次设计这么复杂的用户权限,正在写程序,请高手指点)
----------------------------------------------------------------
对某个对象加入对象表,及对象粒度表中,得到ItemID
如新闻的浏览页面是NewsView.asp,在对象表中加入"新闻",在对象明细表中加入"新闻_浏览"
得到的ItemID是1
在NewsView.asp这个文件中预先写入
Dim ItemID
ItemID=1
UserID=Session("UserID")
'根据这二个参数ItemID,UserID到角色表权限中查是否有值,到用户权限表中查是否有记录
-----------------------------------------------------------
查角色权限表(用户可以属于多个角色,查这个用户所属的多个角色中哪些角色有权限)
if exists( SELECT P_Role_Permission.ItemID
FROM P_Role_Permission INNER JOIN
P_Role ON P_Role_Permission.RoleID = P_Role.RoleID INNER JOIN
P_User_Role ON P_Role.RoleID = P_User_Role.RoleID INNER JOIN
P_User ON P_User_Role.UserID = P_User.UserID
WHERE (P_User.UserID = @a_intManage_UserID) AND (P_Role_Permission.ItemID = @a_intObject_small_ItemID))
return(-3)
-------------------------------------------------------------------------
查用户权限表(用户可以单独增加某个权限,尽量将权限分配到角色中,将用户分配到角色中)
if exists(SELECT P_User_Permission.ItemID
FROM P_User_Permission INNER JOIN
P_User ON P_User_Permission.UserID = P_User.UserID
WHERE (P_User_Permission.ItemID = @a_intObject_small_ItemID) AND (P_User.UserID = @a_intManage_UserID))
return(-3)
没有记录就是没有进入这个页面的权限.
-------------------------------------------------------------
角色表

P_Role

[RoleID] [int] IDENTITY (1, 1) NOT NULL 角色编号,
[RoleName] [varchar] (200) NOT NULL 角色说明
-----------------------------------------------------------------
用户表
P_User

[UserID] [int] IDENTITY (1, 1) NOT NULL 用户编号,
[UserName] [varchar] (50) NOT NULL 用户名,
[PassWord] [varchar] (50) NOT NULL 密码,
[Question] [varchar] (50) NOT NULL 密码提示问题,
[Answer] [varchar] (50) NOT NULL 密码提示问题答案,
[Nickname] [varchar] (50) NOT NULL 昵称,
[TrueName] [varchar] (50) NOT NULL 真名,
.........................
----------------------------------------------------------------------
用户角色表

P_User_Role (外键 关联表 P_User,P_Role)

[URID] [int] IDENTITY (1, 1) NOT NULL 用户角色编号,
[UserID] [int] NULL 用户编号,
[RoleID] [int] NULL 角色编号
---------------------------------------------------------------------
对象表

P_Object

[ObjID] [int] IDENTITY (1, 1) NOT NULL 对象编号,
[ObjName] [varchar] (50) NULL 对象名
-----------------------------------------------------------------------------
对象粒度表

P_Object_small (外键 关联表 P_Object)

[ItemID] [int] IDENTITY (1, 1) NOT NULL 对象粒度编号,
[ObjID] [int] NULL 对象编号,
[ItemType] [varchar] (50) NULL 对象粒度类别,
[DataString] [varchar] (200) NULL 操作的SQL语句,
[DataSource] [varchar] (200) NULL 采用的数据库用户权限
----------------------------------------------------------------------
用户权限表
P_User_Permission (外键 关联表 P_User,P_Object_small)

[UIID] [int] IDENTITY (1, 1) NOT NULL 用户权限编号,
[UserID] [int] NULL 用户编号,
[ItemID] [int] NULL 对象粒度编号,
[Value] [varchar] (50) NULL 用户对某对象粒度的权限值
---------------------------------------------------------------------
角色权限表

P_Role_Permission (外键 关联表P_Role,P_Object_small)

[RIID] [int] IDENTITY (1, 1) NOT NULL 角色权限编号,
[RoleID] [int] NULL 角色编号,
[ItemID] [int] NULL 对象粒度编号,
[Value] [varchar] (50) NULL 角色对某对象粒度的权限值
-------------------------------------------------------------------------
laosan 2003-04-01
  • 打赏
  • 举报
回复
∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷
∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷
∷∷■■■■∷∷∷∷■■■■∷∷∷∷■■■■■■■■■■∷∷∷∷
∷∷■■■■∷∷∷∷■■■■∷∷∷∷■■■■∷∷∷∷■■■■∷∷
∷∷■■■■∷∷∷∷■■■■∷∷∷∷■■■■∷∷∷∷■■■■∷∷
∷∷■■■■∷∷∷∷■■■■∷∷∷∷■■■■∷∷∷∷■■■■∷∷
∷∷■■■■∷∷∷∷■■■■∷∷∷∷■■■■■■■■■■∷∷∷∷
∷∷■■■■∷∷∷∷■■■■∷∷∷∷■■■■∷∷∷∷∷∷∷∷∷∷
∷∷■■■■∷∷∷∷■■■■∷∷∷∷■■■■∷∷∷∷∷∷∷∷∷∷
∷∷■■■■∷∷∷∷■■■■∷∷∷∷■■■■∷∷∷∷∷∷∷∷∷∷
∷∷∷■■■■■■■■■■∷∷∷∷∷■■■■∷∷∷∷∷∷∷∷∷∷
∷∷∷∷∷■■■■■■∷∷∷∷∷∷∷■■■■∷∷∷∷∷∷∷∷∷∷
∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷
∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷
laosan 2003-03-25
  • 打赏
  • 举报
回复
linens 2003-03-24
  • 打赏
  • 举报
回复
如果有多种权限,我最常的方法是在用户表中加一个字段,这个字段保存权限, 字段的每一个位代表一种权限,如 1 代表销售权限,那么你的用户记录里的权限字段中就有 1 ,依此类推,如果你有几个权限就有几位。
在判断的时候,先指定哪些页面属于哪些权限并代表哪个字母(例如销售代表1),如果你进入销售页面时,你的数据库权限字段没有1这个字符,那么就进入失败。
xiwanghope 2003-03-24
  • 打赏
  • 举报
回复
我做的是控制目录,把某个用户不能操作的过程全部不让他们看到。

在页面中在加一些控制不许直接打地址进来的判断就可以了。
cmsoft 2003-03-24
  • 打赏
  • 举报
回复
u can use database(sql server/oracle)'right(rule)
laosan 2003-03-24
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
哇噻,这么多高手呀,那就不用我再发言了:)
看来此贴又要成为下一周的头条啦:P

NT和SQL2000 server的机制都不错啦,
dawooo 2003-03-24
  • 打赏
  • 举报
回复
大宇阅览
oldsky 2003-03-21
  • 打赏
  • 举报
回复
用户/权限系统:
几个基本概念:
1.元权限:最基本的权限元素。如添加、修改、删除、审核等都属于一个元权限。
2.权限范围:一个行使权限的空间范围和时间范围。比如只在asp论坛内有修改权限,在delphi论坛却没有,同时必须指定在asp论坛内行使权力的时限。
3.角色:角色= 一组元权限 + 权限范围
4.用户:用户名/口令字构成对。
5.用户组:具有相同权限的用户可以划为一个组。
6.授权:对某个用户/用户组赋某个角色。
7.用户转组:将用户转到其他用户组中。

了解了这些,数据库设计不难了吧。该系统可以应付各种情况,可以说是一个通用系统。
hwstu 2003-03-21
  • 打赏
  • 举报
回复
基于用户、角色、权限的概念可以彻底解决以上问题.
这个太对了!
权限:用户对一个功能点能做的操作,包括对一个页面的打开,对一个业务逻辑的调用;

一般分为这么几种 浏览 查询(对select的划分) 增加 修改(这个包括审定)删除 还有一个级别。

用户:用户名/口令字构成的一对;
通常情况下要做到这么复杂的系统口令和用户名最好都加密 :)
口令最好是 不可逆加密 用户就不能:)
角色:权限的集合。
这里假定有级别 (可以为一数组) 和其它的权限 浏览查询

另外业务跟角色的关系有两种写法 1、由业务上定义某个角色
2、角色对某个业务的处理
上面两个方法大致一样,但是我认为采用1、更好。因为以后业务的变化是经常的。


在使用的时候,应该让所有的用户通过同一个登录页面登录;
登录页面对用户的口令字/用户名进行验证,如果合法的话在Session对象的集合里面写上他(她)的角色;
在使用任何一个功能点之前验证用户的权限是否足够,从Session对象里面获取他(她)的角色,从数据库里面查看他(她)是否有足够的权限。
cryingboy 2003-03-20
  • 打赏
  • 举报
回复
提供一种方法:建立如下表
UserID Purview_Sub1 Purview_Sub2 ..........
001 1 0 ......
...........

看根据你对实际的需要分类权限,当进行某个操作时,你就检相应的权限
这样的好处就是,每个用户的权限可在随时改动,就是系统使用的过程中也好改!
李世垚 2003-03-20
  • 打赏
  • 举报
回复
我的做法是 用a....z代表各个权限
每个页面有自己的权限代码 如果不被包含在用户的权限中就从定向
cony01 2003-03-20
  • 打赏
  • 举报
回复
前提:
1、登录者是已经注册的用户
2、有设置权限范围(即是将被管理的对象)
如: 公司的每个部门,系统的每个模块,每级栏目等。

设置:
1、被管理对象,
按类设置被管理对象的值(唯一性),类别中再设小类。
如,集团为1,集团下公司为01,集团下工厂为02
公司财务部相对应的唯一值为: 01001;公司技术部的值为:01002
工厂财务部相对应的唯一值为: 02001;工厂营销部的值为:02002

2、管理者
给管理者赋权限:想给他管理公司财务部,在该用户的相关字段Rank(假设)写入01001;如果同时管理公司财务部和公司技术部那么Rank为01001,01002(多选);多个权限类推。 如果管理整个公司则Rank为01

3、判别权限时,用户Rank字段与被管理对象的相对应的字段进行比较。。。。。

lanying 2003-03-20
  • 打赏
  • 举报
回复
meet99(meet99)和楼上都说的不错,说出了权限控制的本质

hchxxzx(现在我有伴了(net学习中)) 的经验主义是不对的

权限很简单,就是一个ACL,一般都是开发一个通用的权限控制模块,所有的系统都可以用
我们这边就是这么做的

我们单位的中国铁路客票预定与发售系统的权限和安全控制的复杂程度估计在国内MIS系统中也是首屈一指的
gleaf 2003-03-20
  • 打赏
  • 举报
回复
基于用户、角色、权限的概念可以彻底解决以上问题.

权限:用户对一个功能点能做的操作,包括对一个页面的打开,对一个业务逻辑的调用;

用户:用户名/口令字构成的一对;

角色:权限的集合。

相互之间的对应关系:用户和权限之间没有直接对应关系;一个用户可以扮演多个角色,多个用户可以扮演相同的角色;一个角色对应了由若干个权限组成的集合,某个权限可以分属多个不同的角色。
把以上三个概念实现在你的数据库中作为应用的基础。

在使用的时候,应该让所有的用户通过同一个登录页面登录;
登录页面对用户的口令字/用户名进行验证,如果合法的话在Session对象的集合里面写上他(她)的角色;
在使用任何一个功能点之前验证用户的权限是否足够,从Session对象里面获取他(她)的角色,从数据库里面查看他(她)是否有足够的权限。

以上就是解决类似问题的通用解决办法。
如果你的用户使用USB Encripted Token之类的加密工具,他(她)的角色就可以写在他的USB Token里面,那样子的话就更安全。
meet99 2003-03-11
  • 打赏
  • 举报
回复
上面说的方法都是很简单的应用,不能彻底解决问题!
1.请详细看看winnt的权限分组。
2.采用角色管理的想法。
...



poolnet 2003-03-11
  • 打赏
  • 举报
回复
偶有一套,类ACL控制,应用于协同办公系统中
「已注销」 2003-03-11
  • 打赏
  • 举报
回复
其实 lgchao() 已经说得很好。这样做很好。用二进制。
加载更多回复(15)

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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