您的位置:首页 > 编程语言 > ASP

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

2010-05-14 22:55 405 查看
  在上一篇中我们完成的简易的框架,这一篇中主要是如何制作权限按钮的控件(新增,编辑,删除,打印)

  

  扩展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权限功能(一 )
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: