数据库中建一个权限表,存放操作。权限表rights
-------------
id    name
1      浏览
2      编辑
3      审核
用户组表usergroup
-------------
id    name
1      管理组
2      会员组
现在要把权限赋矛给用户组,怎么赋予呢?想到两种方法:第一种:
在用户组表中增加一个字段rights,将用户组拥有的权限id值以豆号分隔组成字符串存入。
如:
id    name    rights
1    管理组    1,2,3第二种:
按照三范式增加一个 用户组--权限 的关联表实现多对多的关联。该用哪种方式呢?

解决方案 »

  1.   

    实用第二种吧。
    第二种处理起来容易明白,而且扩展性好多了。
    将来增加新的权限的时候不用去修改代码,而第一种方式会修改很多代码。
    设置会修改rights列的长度等!
      

  2.   

    我觉得用第二种方法吧。可以参考一下SQL Server的角色-权限的设计。
      

  3.   

    上面的方法也行,其实用.net的话可以用微软那套角色管理
    如admin角色
    if(User.IsInRole("admin"))
    {
    ...
    }
      

  4.   

    在rights 中使用o和1表示相关权限
      

  5.   

    我的设计是这样的。Users (ID)
    Roles (ID)
    UsersInRoles (UserID,RoleID)
      

  6.   

    我的 SQL 设计:
    --用户基本表 DROP Table [Users]
    Create Table [Users]
    (
     --用户ID
     [ID] int identity(1,1) Not Null,
     --用户名
     [Username] varchar(50) Not Null Unique,
     --密码
     [Password] varchar(256) Not Null,
     --昵称
     [Netname] nvarchar(50) Not Null Unique,
     --邮箱
     [Email] varchar(50) Null,
     --密保问题
     [Question] nvarchar(50) Null,
     --密保回答
     [Answer] varchar(256) Null,
     --锁定状态
     [IsLockedOut] bit Not Null Default(0),
     --创建时间
     [CreationDate] smalldatetime Not Null Default(GetDate()),
     --最后锁定时间
     [LastLockedOutDate] smalldatetime Null,
     --最后登录时间
     [LastLoginDate] smalldatetime Null,
     --最后活动时间
     [LastActivedDate] smalldatetime Null,
     --最后更改密码时间
     [LastPasswordChangedDate]smalldatetime Null,
     --登陆失败次数
     [FailedPasswordAttemptCount] smallint Not Null Default(0),
     --最后登录失败时间
     [FailedPasswordAttemptWindowStart] smalldatetime Null,
     --密保回答失败次数
     [FailedAnswerAttemptCount] smallint Not Null Default(0),
     --最后密保回答失败时间
     [FailedAnswerAttemptWindowStart] smalldatetime Null,
     --CookieKey
     [CookieKey] varchar(8) Null, 
     /*****主键约束*****/
     Constraint [PK_Users_ID] Primary Key([ID])
    )
    GO--角色表 DROP Table [Roles]
    Create Table [Roles]
    (
     --角色编号
     [ID] int identity(1,1) Not Null,
     --角色名
     [Rolename] nvarchar(50) Not Null Unique,
     /*****主键约束*****/
     Constraint [PK_Roles_ID] Primary Key([ID])
    )GO--权限表 DROP Table [UsersInRoles]
    Create Table [UsersInRoles]
    (
     --用户编号
     [UserID] int Not Null,
     --角色编号
     [RoleID] int Not Null,
     /*****主键约束*****/
     Constraint [PK_UsersInRoles_UserID_RoleID] Primary Key([UserID],[RoleID]),
     --关联至 Users 的 [ID]
     Constraint [FK_UsersInRoles_Users_ID] Foreign Key ([UserID]) References [Users]([ID]) On Delete Cascade On Update Cascade,
     --关联至 Roles 的 [ID]
     Constraint [FK_UsersInRoles_Roles_ID] Foreign Key ([RoleID]) References [Roles]([ID]) On Delete Cascade On Update Cascade
     )GO