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

 

  在上一篇中我们完成的简易的框架,这一篇中主要是如何制作权限按钮的控件(新增,编辑,删除,打印)

  

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

  (效果图)

  

  

 

  

  由PermissionsButton.csButtonItem.csButtonItemConverter.cs组成

  

  1.PermissionsButton.cs 继存 WebControl类

  

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Web;
using  System.ComponentModel;
using  System.Web.UI;
using  System.Security.Permissions;
using  System.Web.UI.WebControls;
using  System.Drawing.Design;
using  System.ComponentModel.Design;

namespace  EC.Permissions.WebControls
{
    
///   <summary>
    
///  菜单按钮控件
    
///   </summary>
    [
    AspNetHostingPermission(SecurityAction.Demand,
        Level 
=  AspNetHostingPermissionLevel.Minimal),
    AspNetHostingPermission(SecurityAction.InheritanceDemand,
        Level 
=  AspNetHostingPermissionLevel.Minimal),
    DefaultProperty(
" Buttons " ),
    ParseChildren(
true " Buttons " ),
    ToolboxData(
" <{0}:PermissionsButton runat=\ " server\ " > </{0}:PermissionsButton> " ),
    PersistenceMode(PersistenceMode.InnerDefaultProperty),
    Description(
" 菜单按钮控件 " )
    ]
    
public   class  PermissionsButton :WebControl
    {
        
public   string  TemplateStr  =   " <div>{0}</div> " ;
        
private  List < ButtonItem >  buttons;

        
public  PermissionsButton()
        {
            buttons 
=   new  List < ButtonItem > ();
        }

        
protected   override   void  Render(HtmlTextWriter w)
        {
            w.Write(TemplateStr, AddButtonToHtml());
            
base .RenderContents(w);  
        }

        
///   <summary>
        
///  按钮集合
        
///   </summary>
        [
        Category(
" Behavior " ),
        Description(
" 按钮集合 " ),
        Editor(
typeof (CollectionEditor),  typeof (UITypeEditor)),
        PersistenceMode(PersistenceMode.InnerDefaultProperty)
        ]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]

        
public  List < ButtonItem >  Buttons {  get  {  return  buttons; } }

        
private   string  AddButtonToHtml()
        {
            
            StringBuilder sb 
=   new  StringBuilder();
            sb.Append(
" <table border=\ " 0 \ "  cellspacing=\ " 0 \ "  cellpadding=\ " 0 \ " ><tr> " );
            
foreach  (ButtonItem button  in  Buttons)
            {
                
if  (DAL.CheckButton(button.Type))
                {
                    sb.Append(
" <td> " );
                    sb.AppendFormat(
@" <input type='button' value='{0}'> " , button.Text);
                    sb.Append(
" </td> " );
                }

            }
            sb.Append(
" </tr></table> " );
            
return  sb.ToString();
        }
    }
}

 

   2. ButtonItem.cs

  

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.ComponentModel;

namespace  EC.Permissions.WebControls
{
    [TypeConverter(
typeof (ButtonItemConverter)), Description( " 按钮集合 " )]
    
public   class  ButtonItem
    {
        
public  ButtonItem()
            : 
this (String.Empty, PermissionType.LIST,  true )
        {
        }

        
public  ButtonItem( string  caption, PermissionType type,  bool  visible)
        {
            
this .Text  =  caption;
            
this .Type  =  type;
            
this .Visible  =  visible;
        }

        [Category(
" Behavior " ), DefaultValue( " 按钮 " ), Description( " 按钮名称 " ), Browsable( true ), NotifyParentProperty( true )]
        
public   string  Text {  get set ; }

        [Category(
" Behavior " ), DefaultValue( true ), Description( " 是否显示 " ), NotifyParentProperty( true )]
        
public   bool  Visible {  get set ; }

        [Category(
" Behavior " ), DefaultValue( "" ), Description( " 功能类型 " ), NotifyParentProperty( true )]
        
public  PermissionType Type {  get set ; }
    }
}

 

 

  3. ButtonItemConverter.cs 

  

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.ComponentModel;
using  System.Globalization;

namespace  EC.Permissions.WebControls
{
    
public   class  ButtonItemConverter : ExpandableObjectConverter
    {
        
#region  方法
        
public   override   bool  CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
        {
            
if  (sourceType  ==   typeof ( string ))
            {
                
return   true ;
            }
            
return   base .CanConvertFrom(context, sourceType);
        }

        
public   override   bool  CanConvertTo(ITypeDescriptorContext context, Type destinationType)
        {
            
if  (destinationType  ==   typeof ( string )) {  return   true ; }
            
return   base .CanConvertTo(context, destinationType);
        }

        
public   override   object  ConvertFrom(ITypeDescriptorContext context, CultureInfo culture,  object  value)
        {
            
if  (value  ==   null ) {  return   new  ButtonItem(); }

            
if  (value  is   string )
            {
                
string  s  =  ( string )value;
                
if  (s.Length  ==   0 ) {  return   new  ButtonItem(); }
                
return   " ButtonItem " ;
            }
            
return   base .ConvertFrom(context, culture, value);
        }

        
public   override   object  ConvertTo(ITypeDescriptorContext context, CultureInfo culture,  object  value, Type destinationType)
        {
            
if  (value  !=   null ) {  if  ( ! (value  is  ButtonItem)) {  throw   new  ArgumentException( " Invalid ButtonItem " " value " ); } }
            
if  (destinationType  ==   typeof ( string )) {  if  (value  ==   null ) {  return  String.Empty; }  return  ((ButtonItem)value).Text; } 
            
            
return   base .ConvertTo(context, culture, value, destinationType);
        }
        
#endregion
    }
}

 

 

 

最后在webroot的web.config

中添加

 

<add namespace="EC.Permissions.WebControls" assembly="EC.PermissionsButton" tagPrefix="EcControls"/>

 

页面引用 Default.aspx

        <cc1:PermissionsButton ID="PermissionsButton1" runat="server" >
            <cc1:ButtonItem Text="新增"  Type="ADD"/>
            <cc1:ButtonItem Text="编辑" Type="EDIT" />
        </cc1:PermissionsButton>

 

  插入SQL Your RoleId请替换成你现有的RoleId

  INSERT INTO [aspnet_Ex_PermissionsForRoles](RoleId,ModulePath,PermissionValue) Values('Your RoleId','/Admin/Test/default.aspx',26)
  INSERT INTO [aspnet_Ex_PermissionsForRoles](RoleId,ModulePath,PermissionValue) Values('Your RoleId','/Admin/Test/ok.aspx',26)

 

  运行页面 效果如下

  

 

  将26改为8

   注 数字来源于

  

 

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

 

   

  !删除按钮没有了

  将8改为32(DELETE)

  

    

  按钮不见

 

  完

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

 

 

  目录

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

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值