Group_define(组定义)字段中文名称 字段名 字段类型 主健 外健 是否为空
组名称 Group_name varchar(50) FALSE FALSE TRUE
组描述 Describe Varchar(255) FALSE FALSE TRUE
组成员名称 Member_name varchar(50) FALSE FALSE False
组类型 Grade_Type Char(1) FALSE FALSE TRUE
User_define (用户定义)字段中文名称 字段名 字段类型 主健 外健 是否为空
用户名称 User_ name varchar(50) TRUE FALSE FALSE
用户全名称 User_full_name varchar(50) FALSE FALSE FALSE
密码 Password Varchar(40) FALSE FALSE TRUE
用户能够更改密码 Never_change Char(1) FALSE FALSE TRUE
账号是否停用 ID_stop Char(1) FALSE FALSE TRUE
用户创建日期 Create_date datetime FALSE FALSE TRUE
用户注销日期 Delete_date datetime FALSE FALSE TRUE
用户注销标记 Delete_type Char(1) FALSE FALSE TRUE
用户描述 describe varchar(255) FALSE FALSE TRUE
用户所属组 group_owner varchar(255) FALSE FALSE TRUE
类型 Type Char(1) FALSE FALSE TRUE
User_owner (用户定义)字段中文名称 字段名 字段类型 主健 外健 是否为空
用户名称 User_name varchar(50) TRUE FALSE FALSE
用户所属组 group_owner varchar(255) FALSE FALSE FALSE
Subsystem_define (模块功能定义)字段中文名称 字段名 字段类型 主健 外健 是否为空
子系统名称 Subsys_name varchar(50) FALSE FALSE FALSE
子系统描述 Subsys_description varchar(50) FALSE FALSE FALSE
Menu_define(菜单定义)字段中文名称 字段名 字段类型 主健 外健 是否为空
菜单ID Menu_name varchar(50) TRUE FALSE FALSE
菜单名称 Menu_caption varchar(50) FALSE FALSE FALSE
所属模块 Subsys_name varchar(50) TRUE TRUE FALSE
command_define(命令按钮定义)字段中文名称 字段名 字段类型 主健 外健 是否为空
按钮ID Command_name varchar(50) TRUE FALSE FALSE
按钮名称 Command_caption varchar(50) FALSE FALSE FALSE
所属菜单 Menu_name varchar(50) FALSE TRUE FALSE
所属模块 Subsys_name varchar(50) FALSE TRUE FALSE
Group_power(组权限)字段中文名称 字段名 字段类型 主健 外健 是否为空
ID Id int TRUE TRUE FALSE
组ID group_name varchar(50) TRUE TRUE FALSE
子系统ID Subsys_ name varchar(50) TRUE TRUE FALSE
菜单ID Menu_ name varchar(50) TRUE TRUE FALSE
按钮ID Command_ name varchar(50) TRUE TRUE FALSE
User_power(用户权限)字段中文名称 字段名 字段类型 主健 外健 是否为空
ID id int TRUE TRUE FALSE
组ID group_ name varchar(50) TRUE TRUE FALSE
子系统ID Subsys_ name varchar(50) TRUE TRUE FALSE
菜单ID Menu_ name varchar(50) TRUE TRUE FALSE
按钮ID Command_ name varchar(50) TRUE TRUE FALSE
System_log(系统登陆日志)字段中文名称 字段名 字段类型 主健 外健 是否为空
用户ID User_ name varchar(50) TRUE TRUE FALSE
子系统名称 Subsys_ name varchar(50) FALSE FALSE FALSE
登陆机器名 Machine_name Varchar(50) FALSE FALSE FALSE
进入时间 enter_time datetime TRUE FALSE FALSE
退出时间 exit_time datetime FALSE FALSE TRUE

解决方案 »

  1.   


    前提:
    1、登录者是已经注册的用户
    2、有设置权限范围(即是将被管理的对象)   
          如: 公司的每个部门,系统的每个模块,每级栏目等。设置:
    1、被管理对象,
             按类设置被管理对象的值(唯一性),类别中再设小类。
            如,集团为1,集团下公司为01,集团下工厂为02
                公司财务部相对应的唯一值为: 01001;公司技术部的值为:01002
                工厂财务部相对应的唯一值为: 02001;工厂营销部的值为:020022、管理者
             给管理者赋权限:想给他管理公司财务部,在该用户的相关字段Rank(假设)写入01001;如果同时管理公司财务部和公司技术部那么Rank为01001,01002(多选);多个权限类推。 如果管理整个公司则Rank为013、判别权限时,用户Rank字段与被管理对象的相对应的字段进行比较。。----------------
    基于用户、角色、权限的概念可以彻底解决以上问题.
    这个太对了!
    权限:用户对一个功能点能做的操作,包括对一个页面的打开,对一个业务逻辑的调用;一般分为这么几种 浏览 查询(对select的划分) 增加  修改(这个包括审定)删除  还有一个级别。用户:用户名/口令字构成的一对;
    通常情况下要做到这么复杂的系统口令和用户名最好都加密 :) 
    口令最好是 不可逆加密 用户就不能:)
    角色:权限的集合。
    这里假定有级别 (可以为一数组) 和其它的权限 浏览查询另外业务跟角色的关系有两种写法  1、由业务上定义某个角色
                                  2、角色对某个业务的处理
    上面两个方法大致一样,但是我认为采用1、更好。因为以后业务的变化是经常的。
    在使用的时候,应该让所有的用户通过同一个登录页面登录;
    登录页面对用户的口令字/用户名进行验证,如果合法的话在Session对象的集合里面写上他(她)的角色;
    在使用任何一个功能点之前验证用户的权限是否足够,从Session对象里面获取他(她)的角色,从数据库里面查看他(她)是否有足够的权限。-------------------------
    用户/权限系统:
    几个基本概念:
    1.元权限:最基本的权限元素。如添加、修改、删除、审核等都属于一个元权限。
    2.权限范围:一个行使权限的空间范围和时间范围。比如只在asp论坛内有修改权限,在delphi论坛却没有,同时必须指定在asp论坛内行使权力的时限。
    3.角色:角色= 一组元权限 + 权限范围
    4.用户:用户名/口令字构成对。
    5.用户组:具有相同权限的用户可以划为一个组。
    6.授权:对某个用户/用户组赋某个角色。
    7.用户转组:将用户转到其他用户组中。了解了这些,数据库设计不难了吧。该系统可以应付各种情况,可以说是一个通用系统。
    -----------------
    如果有多种权限,我最常的方法是在用户表中加一个字段,这个字段保存权限, 字段的每一个位代表一种权限,如 1 代表销售权限,那么你的用户记录里的权限字段中就有 1 ,依此类推,如果你有几个权限就有几位。
    在判断的时候,先指定哪些页面属于哪些权限并代表哪个字母(例如销售代表1),如果你进入销售页面时,你的数据库权限字段没有1这个字符,那么就进入失败。
    -------------------------
    有关用户权限的七个表(初次设计这么复杂的用户权限,正在写程序,请高手指点)
    ----------------------------------------------------------------
    对某个对象加入对象表,及对象粒度表中,得到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                                     角色对某对象粒度的权限值
    -------------------------------------------------------------------------
      

  2.   

    其实最好的方法是参考SQL SERVER的系统权限表的设计,
    可以分LOGIN,USER,ROLE等概念