你好,欢迎来到电脑编程技巧与维护杂志社! [免费注册][请登录 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 计算机安全与维护
权限管理设计方法
 

       本文借鉴用户角色管理模式的经验,设计了一种基于页面的权限控制方法,并用ASP.NET进行了系统实现,该方法为网络系统权限功能设计提供了一条很好的思路。

    关键词  ASP.NET,权限管理

  

一、引言

ASP.NET为网络系统设计提供了强大的设计功能,其使用简单,易于上手,是开发网络系统不错的选择。在网络系统设计中,用户权限管理是不可缺少的部分,其设计方法对于许多新手来说是一个较为复杂的问题。作者通过开发实践,提供了一种基于角色用户关系的页面权限管理通用方法,这也是实际学习中的一些体会,希望可以起到抛砖引玉的作用。

二、数据库设计

为了实现权限管理的功能,系统开发中借鉴了Windows的用户角色管理方法。在数据库设计中共用了5个表。其中信息表有三个:UserCodeRoleCodeModuleCode,分别代表用户信息表、用户组信息表和模块页面信息表。为了表达这三者之间的关系,建立两个关系表:UserRoleRoleModule,分别代表用户与用户组关系、用户组与模块关系。具体数据库关系如图1所示:

 


1 数据库关系图

具体思路是:用户在完成系统注册后,系统管理员可以对其进行管理,给用户分配不同的用户组,也就是根据需要对其权限进行定制。同一用户可以属于不同的用户组,其使用权限为所赋予用户组的权限的最大限度,用户组为用户权限的集合,它与模块页面间建立关系,不同的角色可以访问不同的页面集合,整个系统授权过程可以由具备系统管理权限的用户来完成。

三、权限管理

系统权限管理功能有添加用户、管理用户、添加用户组、管理用户组、添加模块、管理模块等六项功能。其中添加用户、添加用户组、添加模块等功能对数据表UserCodeRoleCodeModuleCode分别进行插入操作即可,比较简单,这里不再进行介绍,下面重点对用户管理、用户组管理、模块管理及这三者之间的相互关系进行重点介绍。

1.用户管理

用户管理主要是对用户进行删除与授权管理,其管理界面如图2,当点击授权后,可以调出所有用户组并选择要加入的用户组。下面将具体介绍授权实现的方法。

 

 



 

  2系统用户管理界面

 

 

首先要显示当前用户所属的用户组:

    public SqlDataReader SelectByUserRole(int userid,int roleid)

        {

        Database data = new Database();

        SqlDataReader reader = null;

SqlParameter[] prams = {                                       data.MakeInParam("@UserID",System.Data.SqlDbType.Int,4,userid),    

data.MakeInParam("@RoleID",System.Data.SqlDbType.Int,4,roleid)};

        data.RunProc("UserRole_SelectByUserRole",prams,out reader);

        return reader;

        }

其中Database为数据访问的基础类,提供了运行SQL命令与存储过程的基本功能。存储过程UserRole_SelectByUserRole代码如下:

CREATE PROCEDURE dbo.UserRole_SelectByUserRole

@UserID int,@RoleID int

AS

select * from UserRole where UserID=@UserID and RoleID=@RoleID

然后更改当前用户所属的用户组:

//先对原来的用户授权进行删除

    int userid = int.Parse(Request.QueryString["userid"]);

    CUserRole ur = new CUserRole();

    ur.DeleteByUserID(userid);

    //开始对选择的项进行增加

    int i;

    int rowcount = DataGrid1.Items.Count;

    for(i=0;i<rowcount;i++)

    {

    //检查是否在关系表中存在

    int roleid = (int)DataGrid1.DataKeys[i];

    CheckBox cb = (CheckBox)DataGrid1.Items[i].Cells[1].Controls[1];

    if(cb.Checked==true)

    {

    ur.Create(userid,roleid,"");

    }

    }

CUserRole类的Create函数如下:

public bool Create(Int32 userID,Int32 roleID,String memo)

        {

        Database data = new Database();

SqlParameter[] prams = {                                       data.MakeInParam("@UserID",System.Data.SqlDbType.Int,4,userID),

data.MakeInParam("@RoleID",System.Data.SqlDbType.Int,4,roleID),

data.MakeInParam("@Memo",System.Data.SqlDbType.Char,100,memo) };

        int reval = data.RunProc("UserRole_Create",prams);

        data.Close();

        data.Dispose();

        if(reval==1)

        {

        return true;

            }

            else

            {

        return false;

            }

        }

存储过程UserRole_Create的代码如下:

CREATE PROCEDURE dbo.UserRole_Create

@UserID int,@RoleID int,@Memo char(100)

AS

begin tran

insert into UserRole (UserID,RoleID,Memo) values(@UserID,@RoleID,@Memo)

if @@error!=0

    begin

    rollback

    return 0

    end

else

    begin

    commit

    return 1

    end

 

2.用户组管理

用户组管理界面如图2所示,下面将具体介绍授权实现方法。


 

 

 3 用户组管理界面

 

 


显示当前用户组的有权访问的模块信息:

    public SqlDataReader SelectByRoleModule(int roleid,int moduleid)

        {

        Database data = new Database();

        SqlDataReader reader = null;

SqlParameter[] prams = {   

data.MakeInParam("@RoleID",System.Data.SqlDbType.Int,4,roleid),

data.MakeInParam("@ModuleID",System.Data.SqlDbType.Int,4,moduleid)};

        data.RunProc("RoleModule_SelectByRoleModule",prams,out reader);

        return reader;

        }

存储过程RoleModule_SelectByRoleModule的定义为:

CREATE PROCEDURE dbo.RoleModule_SelectByRoleModule

@RoleID int,@ModuleID int

AS

select * from RoleModule where RoleID=@RoleID and ModuleID=@ModuleID

在获得当前用户组的授权模块信息后,可以对DataGrid中的CheckBox进行初始化设置。当前用户组模块信息的设置如下。

int roleid = int.Parse(Request.QueryString["RoleID"]);

        CRoleModule rm = new CRoleModule();

        rm.DeleteByRoleID(roleid);

        //开始对选择的项进行增加

        int i;

        int rowcount = DataGrid1.Items.Count;

        for(i=0;i<rowcount;i++)

        {

        //检查是否在关系表中存在

        int moduleid = (int)DataGrid1.DataKeys[i];

        CheckBox cb = (CheckBox)DataGrid1.Items[i].Cells[1].Controls[1];

        if(cb.Checked==true)

        {

        rm.Create(roleid,moduleid);

        }

     }

其方法与用户授权方法基本类型,在此不再展开描述。

3.页面权限分析

Page_Load()事件中加载下面的函数进行权限分析

    private void CheckRight(string loginid,string pagename)

        {

        CCheckRightView cr = new CCheckRightView();

        SqlDataReader dr = null;

        dr = cr.Select(loginid,pagename);

        if(dr.Read()==false)

        {

        Response.Write("<script language=javascript>");

        Response.Write("alert('您没有访问该模块的权限');");

        Response.Write("document.location.href='Login.aspx';");

        Response.Write("</script>");

        return;

        }

    }

//CCheckRightView的Select函数事件

public SqlDataReader Select(String loginID,String modulePage)

        {

        Database data = new Database();

        SqlDataReader reader = null;

        SqlParameter[] prams = {

                                       data.MakeInParam("@LoginID",System.Data.SqlDbType.VarChar,20,loginID),

        data.MakeInParam("@ModulePage",System.Data.SqlDbType.NVarChar,100,modulePage)

           };

        data.RunProc("CheckRightView_SelectInfo",prams,out reader);

        return reader;

        }

//视图CheckRightView的代码如下:

CREATE VIEW dbo.CheckRightView

AS

SELECT dbo.UserCode.LoginID, dbo.ModuleCode.ModulePage

FROM dbo.UserCode INNER JOIN  dbo.ModuleCode INNER JOIN dbo.RoleCode INNER JOIN

      dbo.RoleModule ON dbo.RoleCode.RoleID = dbo.RoleModule.RoleID ON

      dbo.ModuleCode.ModuleID = dbo.RoleModule.ModuleID INNER JOIN

  dbo.UserRole ON dbo.RoleCode.RoleID = dbo.UserRole.RoleID ON  

  dbo.UserCode.UserID = dbo.UserRole.UserID

 

存储过程CheckRightView_SelectInfo的代码如下:

CREATE PROCEDURE dbo.CheckRightView_SelectInfo

@LoginID varchar(20),@ModulePage nvarchar(100)

AS

select * from CheckRightView where LoginID=@LoginID and ModulePage=@ModulePage

四、结语

本文设计了基于页面权限管理的方法,在ASP.NET利用C#进行实现,包括用户添加、删除、修改、用户组的添加、删除与修改、模块的添加、删除与修改,用户与用户组关系的管理、用户组与模块关系的管理,这对网络系统的设计具有很强的应用价值。

 

  推荐精品文章

·“物链网”的正确打开姿势:区块链如何拯…
·Facebook利用人工智能的六种方式,有些你…
·微软推出Visual Studio Kubernetes工具包…
·Facebook 正在重构 React Native,将重写…
·Facebook 正在重构 React Native,将重写…
·GitLab发布Web IDE 在Web端为你提供集成开…
·5G第一阶段标准发布 中国厂商标准占三成
·微软Windows 10的上下文菜单引入Fluent D…
·蚂蚁金服完成新一轮100亿美元融资 估值15…
·搭搭云发布3.0平台上线暨品牌升级 让SaaS…
·京东推出京点智慧办公方案 一体化服务平台…
·Java 流(Stream)、文件(File)和IO
·Java 异常处理
·Java 基础语法

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备06048724号,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区长春桥路5号6号楼1209室,邮编:100089