Matt Can Code  
公告
日历
统计
  • 随笔 - 12
  • 文章 - 0
  • 评论 - 19
  • 引用 - 1

导航

 

最新评论

[code=csharp] using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using MyGOModel; using MyGOBLL; using System.Reflection; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { List<string> dic = new List<string>(); Assembly assembly = Assembly.Load("MyGOBLL"); foreach (Type type in assembly.GetTypes()) { MethodInfo[] methods = type.GetMethods(); foreach (MethodInfo method in methods) { OperateBaseAttribute[] attrs = method.GetCustomAttributes(typeof(OperateBaseAttribute), false) as OperateBaseAttribute[]; if (attrs != null && attrs.Length > 0) { foreach (OperateBaseAttribute attr in attrs) { dic.Add(attr.Description); } } } } CheckBox1.Text = dic[0]; CheckBox2.Text = dic[1]; CheckBox3.Text = dic[2]; CheckBox4.Text = dic[3]; CheckBox5.Text = dic[4]; Button2.Text = dic[0]; Button3.Text = dic[1]; Button4.Text = dic[2]; Button5.Text = dic[3]; Button6.Text = dic[4]; } } protected void Button1_Click(object sender, EventArgs e)//分配角色 写入session 构造UserInfo { MyGOModel.UserInfo userinfo = new MyGOModel.UserInfo(); userinfo.Name = "孙志攀"; List<Operation> ops = new List<Operation>(); List<Role> roles = new List<Role>(); if (CheckBox1.Checked) { ops.Add(new Operation("ViewNews")); } if (CheckBox2.Checked) { ops.Add(new Operation("AddNews")); } if (CheckBox3.Checked) { ops.Add(new Operation("EditNews")); } if (CheckBox4.Checked) { ops.Add(new Operation("DeleteNews")); } if (CheckBox5.Checked) { ops.Add(new Operation("CheckNews")); } userinfo.Operations = ops; userinfo.Roles = roles; Session["UserInfo"] = userinfo; } protected void Button2_Click(object sender, EventArgs e) { NewsBLL news = new NewsBLL(); try { news.ViewNews(); Label1.Text = "操作成功!"; } catch(PermisssionNotEnoughException ex) { Label1.Text = ex.Message; } } protected void Button3_Click(object sender, EventArgs e) { NewsBLL news = new NewsBLL(); try { news.AddNews(); Label1.Text = "操作成功!"; } catch (PermisssionNotEnoughException ex) { Label1.Text = ex.Message; } } protected void Button4_Click(object sender, EventArgs e) { NewsBLL news = new NewsBLL(); try { news.EditNews(); Label1.Text = "操作成功!"; } catch (PermisssionNotEnoughException ex) { Label1.Text = ex.Message; } } protected void Button5_Click(object sender, EventArgs e) { NewsBLL news = new NewsBLL(); try { news.DeleteNews(); Label1.Text = "操作成功!"; } catch (PermisssionNotEnoughException ex) { Label1.Text = ex.Message; } } protected void Button6_Click(object sender, EventArgs e) { NewsBLL news = new NewsBLL(); try { news.CheckNews(); Label1.Text = "操作成功!"; } catch (PermisssionNotEnoughException ex) { Label1.Text = ex.Message; } } } [/code]
@hdjdchen [code=csharp] <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <style type="text/css"> body { font-size:12px; } </style> </head> <body> <form id="form1" runat="server"> <div> <asp:Panel ID="Panel1" runat="server" GroupingText="权限分配" Width="680px" > <br /> <asp:CheckBox ID="CheckBox1" runat="server" /> <asp:CheckBox ID="CheckBox2" runat="server" /> <asp:CheckBox ID="CheckBox3" runat="server" /> <asp:CheckBox ID="CheckBox4" runat="server" /> <asp:CheckBox ID="CheckBox5" runat="server" /> <br /> <br /> &nbsp;&nbsp; <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="分配" Width="72px" /> <br /> <br /> </asp:Panel> <br /> <asp:Panel ID="Panel2" runat="server" GroupingText="权限测试" Width="680px" > <br /> &nbsp; <asp:Button ID="Button2" runat="server" Text="浏览新闻" onclick="Button2_Click" /> <asp:Button ID="Button3" runat="server" Text="添加新闻" onclick="Button3_Click" Width="78px" Enabled="<%$ Permission:AddNews %>" /> <asp:Button ID="Button4" runat="server" Text="修改新闻" onclick="Button4_Click" Enabled="<%$ Permission:EditNews %>" /> <asp:Button ID="Button5" runat="server" Text="删除新闻" onclick="Button5_Click" Enabled="<%$ Permission:DeleteNews %>" /> <asp:Button ID="Button6" runat="server" Text="审核新闻" onclick="Button6_Click" Enabled="<%$ Permission:CheckNews %>" /> <br /> <br /> &nbsp; <asp:Label ID="Label1" runat="server" ForeColor="#829D2F" EnableViewState="false"></asp:Label> <br /> </asp:Panel> </div> </form> </body> </html> [/code]
@hdjdchen 你好,我出现了跟你上面提到的一样的问题,会送以后就Enabled还是初始绑定的那样变不了,另外我没有用模板页,请问你是怎么解决的呀??[code=csharp] [ExpressionEditor(typeof(PermissionExpressionBuilderEditor))] [ExpressionPrefix("Permission")] public class PermissionExpressionBuilder:ExpressionBuilder { public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) { string operationName = entry.Expression; return new CodePrimitiveExpression(PermissionManager.CheckPermission(operationName)); } public override bool SupportsEvaluate { get { return true; } } public override object EvaluateExpression(object target, BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) { string operationName = entry.Expression; return PermissionManager.CheckPermission(operationName); } } public class PermissionExpressionBuilderEditor : ExpressionEditor { public override object EvaluateExpression(string expression, object parseTimeData, Type propertyType, IServiceProvider serviceProvider) { //return expression + ":" + parseTimeData + ":" + propertyType + ":" + serviceProvider; string operationName = expression; return PermissionManager.CheckPermission(operationName); } } [/code][code=csharp]
--引用--------------------------------------------------
简简单单: 既然聚簇索引在功能和性能上都比非聚簇索引好,为什么还要非聚簇索引呢?
--------------------------------------------------------
因为聚簇索引每个表只能有一个。
re: Clustered Index & Non Clustered Index(原创) 简简单单 2009-03-08 16:00  
既然聚簇索引在功能和性能上都比非聚簇索引好,为什么还要非聚簇索引呢?
写的很好,学习!
每个表其实都应该尽量设置clustered,
可选择性的设置nonclustered字段-- 如果除了clustered字段外还有其他需要频繁查询的字段.
需要记住的是nonclustered 比clustered占用多一倍的空间
两个有什么区别呢?是不是都要创建Clustered
你需要把<%@ Master Language="C#" CompilationMode="Never" %> 写在master page 中强迫asp.net不把该叶面编译成实例,这样做牺牲性能,但能够实现这种小粒度权限验证
你好, 我也根据你的设计写了类似的继承expression builder的自定义类型,但我发现在编译后代码第一次运行的时候(还没有进入登陆界面接收到用户登陆ID信息), CLR就已经开始加载自定义的expression builder来解释含有<%# %>的页面, 以后就不再解释该页面了,这样的话我的权限验证只能拿到TASK的信息而拿不到USER的信息,不能进行验证.请问这是什么原因?
??

相关ASPX设为非编辑页面就行了??
在那里设置??请指教..
调用的叶面需要定义
<%@ Master Language="C#" CompilationMode="Never" %>
来防止IL编译器编译该页面。
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;
using System.Web.UI.Design;
using System.Web.Compilation;
using System.CodeDom;
using System.Diagnostics;

namespace BusinessLogic.Security.ExpressionBuilder
{
[ExpressionPrefix("Authenticate")]
[ExpressionEditor(typeof(AuthExpressionBuilderEditor))]
public class AuthExpressionBuilder:System.Web.Compilation.ExpressionBuilder
{
public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
{
System.Diagnostics.Debug.WriteLine(entry.Expression);
string taskName = entry.Expression;
bool boolValue = true;
AuthenticationHelper authHelper = new AuthenticationHelper();
// return new CodePrimitiveExpression(boolValue);
return new CodePrimitiveExpression(authHelper.Authenticate(taskName));

//return new CodePrimitiveExpression(AuthTest.Authenticate(taskName));

}

public override bool SupportsEvaluate { get { return true; } }

public override object EvaluateExpression(object target, BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
{
string taskName = entry.Expression;

AuthenticationHelper authHelper = new AuthenticationHelper();
bool boolValue = authHelper.Authenticate(taskName);
// return new CodePrimitiveExpression(boolValue);
return boolValue;
}
}

public class AuthExpressionBuilderEditor : ExpressionEditor
{
public override object EvaluateExpression(string expression, object parseTimeData, Type propertyType, IServiceProvider serviceProvider)
{
string taskName = expression;
AuthenticationHelper authHelper = new AuthenticationHelper();
return new CodePrimitiveExpression(authHelper.Authenticate(taskName));

}
}




}
你好能不能发个完整的DEMO给我啊?
谢谢你啊
xtb_sp@163.com
你好,
你可以不可以把你的示例代码发给我啊。我很想看看。谢谢
email:xtb_sp@163.com
test
re: 典型的组合模式和迭代器(原创) Matt Yeung 2007-04-06 13:22  
INode mainNode = new CompositeNode();
INode compositeNode = new CompositeNode();
INode leafNode = new LeafNode();

compositeNode. Add(leafNode );
MainNode. Add(compositeNode);

INode anyNode = MainNode;

Iteration(anyNode.GetIterator());

void Iteration(Iterator ie)
{
if (ie.MoveNext)
{
INode node = ie.Current() as INode;
node.doSomething();
Iteration(node.GetIterator());
}
}
我实现了一个组合模式,但是不知道如何迭代组合里的每一个叶子结点
 
Copyright © Matt Yeung Powered by: 博客园 模板提供:沪江博客