zoukankan      html  css  js  c++  java
  • 扩展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 { getset; }

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

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

      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权限功能(一 )

  • 相关阅读:
    人月神话阅读笔记01
    个人每日总结14
    个人每日总结13
    个人每日总结12
    个人每日总结11
    个人每日总结10
    个人每日总结9
    第五周学习进度表
    梦断代码阅读笔记
    05构建之法阅读笔记之五
  • 原文地址:https://www.cnblogs.com/hubj/p/1735744.html
Copyright © 2011-2022 走看看