我现在做公司的OA系统,什么权限、模块、角色、用户他们之间的关系我是这样分得。把角色分配用户,模块和权限联系,然后就是角色和权限的关系,这样,一个用户在系统中有什么样的操作权限也就知道了。我现在的问题是当用户登陆后,怎么把这些信息取出来,怎么保存,然后当用户进入当具体的某一模块时,我怎么去判断他在当前的这个模块中的所有权限。

解决方案 »

  1.   

    权限表我做了。我是把权限和模块联系的,问题是一个模块中他的操作权限比如有,增加,删除,修改,查询,某个用户只有查询的功能,其他的都没有,怎么利用COOKIE来写呀,以前每做过。而且现在公司就我一人,很苦闷。在辛苦一下,能否有具体的好的代码。我只参考,决不会涉及版权什么的。谢谢了。
      

  2.   

    用session("purview)或是Cookies("purview")保存各个用户的权限值。值可以是1,2,3,4  对应增,删,改,查在页面执行前进行判断。
      

  3.   

    登陆系统是保存用户ID(应该是唯一的吧?),到具体页面再根据用户ID取得他对应的权限,比如他有删除权限,则显示删除按钮,否则不显示。
      

  4.   

    使用Session保存一个对象,对象里面的字段包含了该用户在不同模块的对应权限
      

  5.   

    加我QQ,我发一个OA权限控制的原码给你参考一下。290982492
      

  6.   

    每個模塊都有一個代號。
    再建一個表,儲存用戶中,處理(增、刪、改、審核、作費等)模塊的權限
    我在WIN FORM中是這樣實現的,
    WEB FORM也應該可以。
      

  7.   

    public bool GetMyJuris(string uid,string key)
    {
    try
    {
    DataTable dt=new SysJuris().GetMyJuris(uid,key);
    if(dt.Rows.Count==1)
    {
    bool Juris=Convert.ToBoolean(dt.Rows[0][key]);
    return Juris;
    }
    else
    {
    return false;
    }
    }
    catch
    {
    return false;
    }
    }
      

  8.   

    首先要有一个用户对像,该对像有一个方法,方法的输入参数可以是相应模块的ID,该方法的作用就是根据输入的模块ID判断该用户是否有该模块的操作权限,如有就可以返回TRUE值.
    在登录时,把用户对像传给一个Session值,这样当用户要操作某个模块时,就可以取出该用户对像,用上面提到的方法判断权限.
    具体的实现,程序细节就要你自己去琢磨了.
      

  9.   

    如果你用的是ASP.NET那么我建议你去看看context  Identity  Principal  之类的ASP.NET内建的身份验证体制。ASP.NET 一共有windows  passport  form 这样几种认证。你还可以看看“身份验证票“之类的技术,这样你在结合数据库就很方便的实现你说的代码。
    如果你用的是ASP  你就用以上各位朋友说的session来实现。
      

  10.   

    我们一般的设计是这样的系统管理方面:系统框架-》模块-》功能块-》页面(包括各种属性,如编辑、删除等)建立角色-》维护角色权限,包括每个页面的访问权限,如编辑、列表、统计、数据导出、打印、删除等-》把用户添加到角色组中在用户登录的时候,根据用户的帐号,获取用户所能访问的模块或功能块,生成一个Session,然后按照这个Session加载用户的界面而访问权限也保存到Session中,每次用户访问或跳转的时候,都进行验证
      

  11.   

    Asp.Net来实现的话,最好不要用Session
      

  12.   

    --参考:
    /*--软件权限设置控制的例子
    --*/CREATE TABLE 功能 (
    id int IDENTITY (1, 1),
    功能名称 nvarchar (50),
    parentid int
    )
    GOCREATE TABLE 用户 (
    id int IDENTITY (1, 1) NOT NULL,
    用户名 nvarchar (50),
    密码 nvarchar (50),
    修改日期 datetime,
    起始日期 datetime
    )
    GOCREATE TABLE 权限 (
    id int IDENTITY (1, 1) NOT NULL,
    用户ID int,
    功能id int,
    操作权限 int,
    )
    GO--数据
    --软件的功能分类
    insert into 功能
    select '产品销售',0
    union all select '电器',1
    union all select '食品类',1
    union all select '日常用品',1
    union all select '家电',2
    union all select '电脑',2--用户
    insert into 用户
    select '张三',null,getdate(),getdate()
    union all select '李四',null,getdate(),getdate()--权限分配,假设每个功能都有这样的权限设置:1.新增/2.修改/3.删除/4.打印
    insert into 权限
    select 1,2,power(2,1)+power(2,2)+power(2,4)  --张三具有电器类的1.新增/2.修改/4.打印的功能
    union all select 1,4,power(2,1)+power(2,2) --张三具有日常用品类的1.新增/2.修改的功能
    union all select 2,1,power(2,1)+power(2,2)+power(2,3)+power(2,4)  --李四具有所有权限
    /*
    select * from 权限
    drop table 权限
    比如说,我想查询张三对电器类有什么权限的时候我应该怎么写?
    谁能仔细说一下这中权限设计的原理???
    */--将邹老大的题改一下,变成查李四的,李四有所有权限,按说也应有电器类的权限
    --但结果不符
    select 新增=case power(2,1) & 操作权限 when power(2,1) then '√' else '' end
    ,修改=case power(2,2) & 操作权限 when power(2,2) then '√' else '' end
    ,删除=case power(2,3) & 操作权限 when power(2,3) then '√' else '' end
    ,打印=case power(2,4) & 操作权限 when power(2,4) then '√' else '' end
    from 权限 a
    join 用户 b on a.用户ID=b.id and b.用户名='李四' 
    join 功能 c on a.功能ID=c.id and c.功能名称='电器'
    52.--如何使用的示例:--测试数据
    create table 角色表(RoleID int,RoleName varchar(10))
    insert into 角色表
    select 1,'Admin'
    union all select 2,'cwb'
    union all select 3,'manage'create table 权限表(RightID int,RightName varchar(50))
    insert into 权限表
    select 1,'M1_Browser'
    union all select 2,'M1_Add'
    union all select 3,'M1_Modify'
    union all select 4,'M1_Delete'
    union all select 5,'M1_Print'
    union all select 6,'M2_Browser'
    union all select 7,'M2_Print'
    union all select 8,'M3_Browser'
    union all select 9,'M3_Add'
    union all select 10,'M3_Modify'
    union all select 12,'M3_Print'create table 角色权限表(RoleID int,RightID int)
    insert into 角色权限表
    select 1,1
    union all select 1,2
    union all select 1,3
    union all select 1,6
    union all select 2,6
    union all select 2,7
    go--创建显示的存储过程
    create proc p_show
    @RoleName varchar(10)
    as
    select 模块=模块
     ,browser=max(case 权限 when 'browser' then 1 else 0 end)
     ,[Add]=max(case 权限 when 'Add' then 1 else 0 end)
     ,[Modify]=max(case 权限 when 'Modify' then 1 else 0 end)
     ,[delete]=max(case 权限 when 'delete' then 1 else 0 end)
     ,[print]=max(case 权限 when 'print' then 1 else 0 end)
    from(
    select 模块=left(RightName,charindex('_',RightName)-1)
    ,权限=substring(RightName,charindex('_',RightName)+1,50)
    from 角色权限表 a
    join 权限表 b on a.RightID=b.RightID
    where RoleID=(select RoleID from 角色表 where RoleName=@RoleName)
    ) a group by 模块
    go--创建保存的存储过程
    create proc p_save
    @RoleName varchar(10), --要保存的角色名称
    @tbname sysname, --用户选择处理后的结果表名
    @deletetable bit=1 --处理完成后是否自动删除结果表,1.(默认)自动删除 0.不删除
    as
    declare @RoleID int,@s nvarchar(4000)
    select @RoleID=RoleID from 角色表 where RoleName=@RoleName
    SET XACT_ABORT ON 
    begin tran
    delete 角色权限表 where RoleID=@RoleID
    set @s='insert into 角色权限表(RoleID,RightID)
    select @RoleID,a.RightID 
    from 权限表 a join(
    select RightName=模块+''_browser'' from ['+@tbname+'] where browser=1
    union all select 模块+''_Add'' from ['+@tbname+'] where [Add]=1
    union all select 模块+''_Modify'' from ['+@tbname+'] where [Modify]=1
    union all select 模块+''_delete'' from ['+@tbname+'] where [delete]=1
    union all select 模块+''_print'' from ['+@tbname+'] where [print]=1
    ) b on a.RightName=b.RightName'
    exec sp_executesql @s,N'@RoleID int',@RoleID
    if @deletetable=1 exec('drop table ['+@tbname+']')
    commit tran
    go--创建临时表表,保存显示结果
    create table #t(模块 varchar(10),browser bit,[Add] bit,[Modify] bit,[delete] bit,[print] bit)
    insert into #t exec p_show 'admin'--修改权限
    update #t set browser=1,[Add]=1,[Modify]=1--进行权限保存
    exec p_save 'admin','#t'--显示保存结果
    exec p_show 'admin'
    go--删除测试环境
    drop table 角色表,权限表,角色权限表
    drop proc p_show,p_save
      

  13.   

    一两句话说不清楚。--功能权限对应表:
    功能ID    功能名称    URL             权限ID
    1         功能A       /FuncA.aspx     1
    2         功能A1      /FuncA1.aspx    2
    3         功能A1      /FuncA1.aspx    3
    27        功能C       /FuncC.aspx     4
    28        功能X       /FuncX.aspx     5--用记表
    用户ID
      

  14.   

    可选方案:--(1)功能权限对应表:
    功能ID    功能名称    功能页面URL     对应权限ID
    1         功能A       /FuncA.aspx     1
    2         功能A1      /FuncA1.aspx    2
    3         功能A1      /FuncA1.aspx    3
    27        功能C       /FuncC.aspx     4
    28        功能X       /FuncX.aspx     5
    ……
    --(2)用户表
    用户ID/账号/姓名等     用户权限串(1有权/0无权)
    1     admin   管理员    11111……
    2     test    测试员    11001……
    --(3)在每个需限制功能权限的页面中,加权限判断
         如FuncC.aspx,——取当前用户权限串中的第“4”位值,
    ——如果为1,有权执行,继续;
    ——如果为0,提示用户无权执行此功能。
    ……
      

  15.   

    see the <<Asp web programming>> by wrox
      

  16.   

    别老冒充“小女子”啊
    郁闷,
    做程序的人咋就这么变态呐。
    puke
    puke
    puke
    puke
    puke