ASP.NET許可權管理設計方法

來源:互聯網
上載者:User
一、引言

ASP.NET為網路系統設計提供了強大的設計功能,其使用簡單,易於上手,是開發網路系統不錯的選擇。在網路系統設計中,使用者權限管理是不可缺少的部分,其設計方法對於許多新手來說是一個較為複雜的問題。作者通過開發實踐,提供了一種基於角色使用者關係的頁面許可權管理通用方法,這也是實際學習中的一些體會,希望可以起到拋磚引玉的作用。

二、資料庫設計

為了實現許可權管理的功能,系統開發中借鑒了Windows的使用者角色管理方法。在資料庫設計中共用了5個表。其中資訊表有三個:UserCode、RoleCode、ModuleCode,分別代表使用者資訊表、使用者組資訊表和模組頁面資訊表。為了表達這三者之間的關係,建立兩個關係表:UserRole和RoleModule,分別代表使用者與使用者組關係、使用者組與模組關係。具體資料庫關係1所示:

1 資料庫圖表

具體思路是:使用者在完成系統註冊後,系統管理員可以對其進行管理,給使用者指派不同的使用者組,也就是根據需要對其許可權進行定製。同一使用者可以屬於不同的使用者組,其使用許可權為所賦予使用者組的許可權的最大限度,使用者組為使用者權限的集合,它與模組頁面間建立關係,不同的角色可以訪問不同的頁面集合,整個系統授權過程可以由具備系統管理許可權的使用者來完成。

三、許可權管理

系統許可權管理功能有添加使用者、系統管理使用者、添加使用者組、系統管理使用者組、添加模組、管理模組等六項功能。其中添加使用者、添加使用者組、添加模組等功能對資料表UserCode、RoleCode、ModuleCode分別進行插入操作即可,比較簡單,這裡不再進行介紹,下面重點對使用者管理、使用者組管理、模組管理及這三者之間的相互關係進行重點介紹。

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;
    CheckBox cb = (CheckBox)DataGrid1.Items.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.使用者組管理

圖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;

         CheckBox cb = (CheckBox)DataGrid1.Items.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#進行實現,包括使用者添加、刪除、修改、使用者組的添加、刪除與修改、模組的添加、刪除與修改,使用者與使用者組關係的管理、使用者組與模組關係的管理,這對網路系統的設計具有很強的應用價值。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.