1. <li id="3se62"></li>
      <th id="3se62"></th>

      <progress id="3se62"></progress>
         你好,歡迎來到電腦編程技巧與維護雜志社! 雜志社簡介廣告服務讀者反饋編程社區  
        合訂本訂閱
         
         
        您的位置:雜志經典 / 計算機安全與維護
        權限管理設計方法
         

               本文借鑒用戶角色管理模式的經驗,設計了一種基于頁面的權限控制方法,并用ASP.NET進行了系統實現,該方法為網絡系統權限功能設計提供了一條很好的思路。

            關鍵詞  ASP.NET,權限管理

          

        一、引言

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

        二、數據庫設計

        為了實現權限管理的功能,系統開發中借鑒了Windows的用戶角色管理方法。在數據庫設計中共用了5個表。其中信息表有三個:UserCode、RoleCode、ModuleCode,分別代表用戶信息表、用戶組信息表和模塊頁面信息表。為了表達這三者之間的關系,建立兩個關系表:UserRoleRoleModule,分別代表用戶與用戶組關系、用戶組與模塊關系。具體數據庫關系如圖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[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#進行實現,包括用戶添加、刪除、修改、用戶組的添加、刪除與修改、模塊的添加、刪除與修改,用戶與用戶組關系的管理、用戶組與模塊關系的管理,這對網絡系統的設計具有很強的應用價值。

         

          推薦精品文章

        ·2023年7月目錄
        ·2023年6月目錄 
        ·2023年5月目錄
        ·2023年4月目錄 
        ·2023年3月目錄 
        ·2023年2月目錄 
        ·2023年1月目錄 
        ·2022年12月目錄 
        ·2022年11月目錄 
        ·2022年10月目錄 
        ·2022年9月目錄 
        ·2022年8月目錄 
        ·2022年7月目錄 
        ·2022年6月目錄 

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

          友情鏈接
         
        Copyright 2001-2010, www.1wcdp.top, All Rights Reserved
        京ICP備14022230號-1,電話/傳真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
        地址:北京市海淀區遠大路20號寶藍大廈E座704,郵編:100089 
        1. <li id="3se62"></li>
          <th id="3se62"></th>

          <progress id="3se62"></progress>
            操美女小骚逼