扩展ASP.NET MEMBERSHIP权限功能(二 )

  前一篇介绍了需求,和数据库结构与网站和项目结构

 

  这一篇主要介绍一下网站结构和配置

  admin下面的web.config

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="Permission" type="EC.Permissions.Config"/>
  </configSections>
    <appSettings/>
    <connectionStrings/>
  <system.web>
    <authorization>
      <deny users="?" />
    </authorization>
  </system.web>
</configuration>

 

 

  EC.Permissions.Config主要是实现了IConfigurationSectionHandler接口,来完成自定义的配置

 

   admin/test下面 web.config

  

<? xml version = " 1.0 " ?>
<?xml version="1.0"?>
<configuration>
  <Permission type="EC.Permissions.PermissionInfo">
    <ModulePath>account</ModulePath>
    <ModuleName>test</ModuleName>
    <Items>
      <Item>
        <Page>Default.aspx</Page>
        <Function>列表</Function>
        <Val>2</Val>
      </Item>
      <Item>
        <Page>Default.aspx</Page>
        <Function>编辑</Function>
        <Val>16</Val>
      </Item>
      <Item>
        <Page>Default.aspx</Page>
        <Function>删除</Function>
        <Val>32</Val>
      </Item>
      <Item>
        <Page>Ok.aspx</Page>
        <Function>测试</Function>
        <Val>2</Val>
      </Item>
    </Items>
  </Permission>
</configuration>

 

 

  1.串行化 web.config

  EC.Permissions.Config 类

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Configuration;
using  System.Xml;
using  System.Xml.Serialization;
using  System.IO;

namespace  EC.Permissions
{
    
public   class  Config : IConfigurationSectionHandler
    {
        
#region  IConfigurationSectionHandler Members

        
public   object  Create( object  parent,  object  configContext, System.Xml.XmlNode section)
        {
            
// EC.Permissions.PermissionInfo
             string  typeName  =  ((XmlElement)section).GetAttribute( " type " );
            Type type 
=  Type.GetType(typeName);
            XmlSerializer xz 
=   new  XmlSerializer(type);
            
using  (StringReader sr  =   new  StringReader(section.OuterXml))
            {
                
return  xz.Deserialize(sr);
            }
        }

        
#endregion
    }
}

 

 

  2.EC.Permissions.PermissionInfo

  

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Xml.Serialization;

namespace  EC.Permissions
{

    [Serializable]
    [XmlRoot(
" Permission " )]
    
public   class  PermissionInfo
    {
        
///   <summary>
        
///  权限数据库ID
        
///   </summary>
         public   int  PermissionId {  get set ; }

        
///   <summary>
        
///  用户组ID
        
///   </summary>
         public   string  RoleId {  get set ; }

        
///   <summary>
        
///  用户组名
        
///   </summary>
         public   string  RoleName {  get set ; }

        
///   <summary>
        
///  模块路径
        
///   </summary>
        [XmlElement( " ModulePath " typeof ( string ))]
        
public   string  ModulePath {  get set ; }

        
///   <summary>
        
///  模块名字
        
///   </summary>

        [XmlElement(
" ModuleName " typeof ( string ))]
        
public   string  ModuleName {  get set ; }

        
///   <summary>
        
///  权限值
        
///   </summary>
         public  PermissionType PermissionValue {  get set ; }

        [XmlArrayItem(
" Item " typeof (PermissionItemInfo))]
        
public  PermissionItemInfo[] Items {  get set ; }
    }

    [Serializable]
    [XmlRoot(
" Items " )]
    
public   class  PermissionItemInfo
    {
        [XmlElement(
" Page " typeof ( string ))]
        
public   string  Page {  get set ; }

        [XmlElement(
" Function " typeof ( string ))]
        
public   string  Function {  get set ; }

        [XmlElement(
" Val " typeof ( int ))]
        
public   int  Value {  get set ; }

        
public   override   bool  Equals( object  obj)
        {
            
if  (obj  ==   null )
                
return   false ;

            
if  ( this .GetType()  !=  obj.GetType())
                
return   false ;

            
if  (((PermissionItemInfo)obj).Page  ==   this .Page)  return   true ;


            
return   base .Equals(obj);
        }
    }

    
///   <summary>
    
///  权限类型
    
///   </summary>
     public   enum  PermissionType
    {
        ALL
= 0 ,
        LIST
= 2 ,
        VIEW
= 4 ,
        ADD
= 8 ,
        EDIT
= 16 ,
        DELETE
= 32 ,
        PRINT
= 64
    }
}

 

   3.EC.Permissions.DAL 数据库访问

  

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Collections;
using  System.Web.Security;
using  System.Data;
using  EC.DBUtility;
using  System.Data.SqlClient;
using  System.Configuration;
using  System.Web;

namespace  EC.Permissions
{
    
public   class  DAL
    {
        
private   static  DataAccessManager dataAccessManager  =   new  DataAccessManager();

        
///   <summary>
        
///  判断页面是否有此权限
        
///  1.得到当前用户所有的用户组
        
///  2.得到所有用户组的权限并取并集
        
///   </summary>
        
///   <param name="type"></param>
        
///   <returns></returns>
         public   static   bool  CheckPage()
        {
            
bool  bResult  =   false ;

            PermissionInfo pi 
=  GetPermissionInfo;
            
if  (pi  ==   null )
                
return   true ;

            Hashtable ht 
=  GetPermissionsByRole();

            
if  (ht.Count  >   0 )
            {
                
string  key  =   string .Format( " M-{0} " , FolderPath);
                
if  (ht.ContainsKey(key))
                {
                    
string  filename  =  GetFileName;
                    
// 拆箱取出并判断权限
                    PermissionInfo ht_PermissionInfo  =  (PermissionInfo)ht[key];

                    
foreach  (PermissionItemInfo temp  in  pi.Items)
                    {
                        
if  (temp.Page.ToLower().Equals(filename)  &&  ((Convert.ToInt32(ht_PermissionInfo.PermissionValue) & temp.Value) == temp.Value))
                        {
                            bResult 
=   true ;
                            
break ;
                        }
                    }
                }
            }

            
return  bResult;
        }



        
///   <summary>
        
///  判断按钮是否有此权限
        
///  1.得到当前用户所有的用户组
        
///  2.得到所有用户组的权限并取并集
        
///   </summary>
        
///   <param name="type"></param>
        
///   <returns></returns>
         public   static   bool  CheckButton(PermissionType type)
        {

            
bool  bResult  =   false ;

            Hashtable ht 
=  GetPermissionsByRole();

            
if  (ht.Count  >   0 )
            {
                
string  key  =   string .Format( " M-{0} " , FolderPath);
                
if  (ht.ContainsKey(key))
                {
                    
// 拆箱取出并判断权限
                    PermissionInfo ht_PermissionInfo  =  (PermissionInfo)ht[key];

                    bResult 
=  (ht_PermissionInfo.PermissionValue  &  type)  ==  type;
                }
            }

            
return  bResult;
        }

        

        
///   <summary>
        
///  当前目录
        
///   </summary>
         public   static  String FolderPath
        {
            
get
            {
                
string  paths  =  HttpContext.Current.Request.ServerVariables[ " SCRIPT_NAME " ].ToString();
                
return  paths.ToLower();
            }
        }


        
///   <summary>
        
///  获取当前访问页面地址
        
///   </summary>
         public   static   string  GetFileName
        {
            
get
            {
                
string  paths =  HttpContext.Current.Request.ServerVariables[ " SCRIPT_NAME " ].ToString();
                
return  paths.Substring(paths.LastIndexOf( " / " +   1 ).ToLower();
            }
        }

        
///   <summary>
        
///  获取当前目录下权限配置集合
        
///   </summary>
         public   static  PermissionInfo GetPermissionInfo
        {
            
get
            {
                
return  (PermissionInfo)ConfigurationManager.GetSection( " Permission " );
            }
        }

        
///   <summary>
        
///  得到所有用户组的权限并取并集
        
///   </summary>
        
///   <returns></returns>
         public   static  Hashtable GetPermissionsByRole()
        {
            Hashtable ht 
=   new  Hashtable();

            
string [] rolesArr = Roles.GetRolesForUser();
            
string  roles  =   string .Join( " ',' " , rolesArr);
            roles 
=   " ' "   +  roles  +   " ' " ;

            SqlParameter[] parms 
=   new  SqlParameter[ 2 ]; 

            parms[
0 =   new  SqlParameter( " @roles " , SqlDbType.NVarChar);
            parms[
0 ].Value  =  roles;
            parms[
1 =   new  SqlParameter( " @path " , SqlDbType.NVarChar);
            parms[
1 ].Value  =  FolderPath;

            
// 读取用户组的所有权限
             using  (IDataReader dr  =  dataAccessManager.ReadDatabase.ExecuteSpReader( " aspnet_Ex_GetPermissionByRoles " , parms))
            {
                
while  (dr.Read())
                {
                    PermissionInfo permissioninfo 
=   new  PermissionInfo();
                    permissioninfo.PermissionId 
=  Convert.ToInt32(dr[ " PermissionId " ]);
                    permissioninfo.RoleId 
=  Convert.ToString(dr[ " RoleId " ]);
                    permissioninfo.ModulePath 
=  Convert.ToString(dr[ " ModulePath " ]).ToLower();
                    permissioninfo.PermissionValue 
=  (PermissionType)(dr[ " PermissionValue " ]);
                    permissioninfo.RoleName 
=  Convert.ToString(dr[ " RoleName " ]);

                    
string  key  =   string .Format( " M-{0} " , permissioninfo.ModulePath);

                    
// 判断是存入了相同值
                     if  (ht.ContainsKey(key))
                    {
                        
// 拆箱取出并判断,存最大权限
                        PermissionInfo ht_PermissionInfo  =  (PermissionInfo)ht[key];
                        
if  (ht_PermissionInfo.PermissionValue  !=  permissioninfo.PermissionValue)
                        {
                            ht_PermissionInfo.PermissionValue 
=  ht_PermissionInfo.PermissionValue  |  permissioninfo.PermissionValue;
                            ht[key] 
=  ht_PermissionInfo;
                        }
                    }
                    
else
                    {
                        ht.Add(key, permissioninfo);
                    }

                }

                dr.Close();
                
            }

            
return  ht;
        }
    }
}

 

 

 

   至此 简易的框架搭建完成

 

  下一篇 扩展ASP.NET MEMBERSHIP权限功能(三 )之权限控件

  (效果图)

  

  

 

 

  目录

  扩展ASP.NET MEMBERSHIP权限功能(四 )之页面权限
  扩展ASP.NET MEMBERSHIP权限功能(三 )之权限控件
  扩展ASP.NET MEMBERSHIP权限功能(二 )
  扩展ASP.NET MEMBERSHIP权限功能(一 )

 

转载于:https://www.cnblogs.com/hubj/archive/2010/05/14/1735654.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET MVC 是一种用于构建Web应用程序的开发框架,其中权限管理系统是一个重要的功能ASP.NET MVC 权限管理系统用于控制用户在系统中所拥有的特定权限以及能够访问的特定功能功能模块。 ASP.NET MVC 权限管理系统通常包括以下几个关键组件: 1. 用户认证:用户在系统中登录时,需要进行身份验证以确保其身份的合法性。身份验证可以通过用户名和密码,或者通过其他身份验证方式来实现。 2. 用户授权:在用户认证通过之后,需要对用户进行授权,确定其在系统中所具有的特定权限。这可以通过角色或权限的方式进行管理,例如管理员、普通用户等。 3. 角色管理:系统管理员可以创建和管理各种角色,将不同的权限集分配给不同的角色。这样就可以通过简单的角色分配来控制用户在系统中的访问权限。 4. 权限管理:系统提供了细粒度的权限管理机制,可以控制用户对具体功能功能模块的访问权限。管理员可以对每个角色或用户进行权限分配,确定其能够访问的具体功能。 5. 安全性管理:ASP.NET MVC 权限管理系统还需要考虑到安全性方面的问题,包括密码的加密存储、用户会话管理、输入验证等。这些措施可以确保系统在处理用户请求时的安全性。 总之,ASP.NET MVC 权限管理系统是在ASP.NET MVC框架上构建的一种用于管理用户权限和访问控制的系统。通过用户认证、用户授权、角色管理、权限管理和安全性管理的综合运用,可以确保系统只允许授权用户访问特定功能功能模块,提高系统的安全性和可用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值