| Matt Can Code |
|
|||
|
公告
日历
统计
导航 |
最新评论Re:介绍ASP.NET 2.0 新特性(expressionBuilder)对用户界面小粒度权限验证的支持 Jack Sun 2010-10-02 23:03
[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]
Re:介绍ASP.NET 2.0 新特性(expressionBuilder)对用户界面小粒度权限验证的支持 Jack Sun 2010-10-02 23:03
@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 />
<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 />
<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 />
<asp:Label ID="Label1" runat="server" ForeColor="#829D2F" EnableViewState="false"></asp:Label>
<br />
</asp:Panel>
</div>
</form>
</body>
</html>
[/code]
Re:介绍ASP.NET 2.0 新特性(expressionBuilder)对用户界面小粒度权限验证的支持 Jack Sun 2010-10-02 23:02
@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(原创) 风9999 2009-05-06 09:47
--引用--------------------------------------------------
简简单单: 既然聚簇索引在功能和性能上都比非聚簇索引好,为什么还要非聚簇索引呢? -------------------------------------------------------- 因为聚簇索引每个表只能有一个。 re: Clustered Index & Non Clustered Index(原创) 简简单单 2009-03-08 16:00
既然聚簇索引在功能和性能上都比非聚簇索引好,为什么还要非聚簇索引呢?
re: Clustered Index & Non Clustered Index(原创) Justin 2008-09-10 22:08
写的很好,学习!
re: Clustered Index & Non Clustered Index(原创) Matt Yeung 2008-06-18 09:35
每个表其实都应该尽量设置clustered,
可选择性的设置nonclustered字段-- 如果除了clustered字段外还有其他需要频繁查询的字段. 需要记住的是nonclustered 比clustered占用多一倍的空间 re: Clustered Index & Non Clustered Index(原创) 区别 2008-06-16 21:53
两个有什么区别呢?是不是都要创建Clustered
re: 介绍ASP.NET 2.0 新特性(expressionBuilder)对用户界面小粒度权限验证的支持 hdjdchen 2007-08-17 14:43
非常感谢..已经解决了.
re: 介绍ASP.NET 2.0 新特性(expressionBuilder)对用户界面小粒度权限验证的支持[未登录] Matt Yeung 2007-08-17 09:42
你需要把<%@ Master Language="C#" CompilationMode="Never" %> 写在master page 中强迫asp.net不把该叶面编译成实例,这样做牺牲性能,但能够实现这种小粒度权限验证
re: 介绍ASP.NET 2.0 新特性(expressionBuilder)对用户界面小粒度权限验证的支持 hdjdchen 2007-08-16 21:25
你好, 我也根据你的设计写了类似的继承expression builder的自定义类型,但我发现在编译后代码第一次运行的时候(还没有进入登陆界面接收到用户登陆ID信息), CLR就已经开始加载自定义的expression builder来解释含有<%# %>的页面, 以后就不再解释该页面了,这样的话我的权限验证只能拿到TASK的信息而拿不到USER的信息,不能进行验证.请问这是什么原因?
?? 相关ASPX设为非编辑页面就行了?? 在那里设置??请指教.. re: 介绍ASP.NET 2.0 新特性(expressionBuilder)对用户界面小粒度权限验证的支持 Matt Yeung 2007-05-30 18:29
调用的叶面需要定义
<%@ Master Language="C#" CompilationMode="Never" %> 来防止IL编译器编译该页面。 re: 介绍ASP.NET 2.0 新特性(expressionBuilder)对用户界面小粒度权限验证的支持 Matt Yeung 2007-05-30 18:24
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)); } } } re: 介绍ASP.NET 2.0 新特性(expressionBuilder)对用户界面小粒度权限验证的支持 zzzzz 2007-05-28 22:01
代码不在上面吗?
re: 介绍ASP.NET 2.0 新特性(expressionBuilder)对用户界面小粒度权限验证的支持 mextb1860 2007-05-15 22:22
你好能不能发个完整的DEMO给我啊?
谢谢你啊 xtb_sp@163.com re: 介绍自定义安全管理框架的数据结构 mextb1860 2007-05-15 12:22
你好,
你可以不可以把你的示例代码发给我啊。我很想看看。谢谢 email:xtb_sp@163.com re: 领域建模 初级阶段(原创)[未登录] test 2007-04-08 00:28
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()); } } re: 典型的组合模式和迭代器(原创) ccj 2007-03-30 12:49
我实现了一个组合模式,但是不知道如何迭代组合里的每一个叶子结点
|
![]() |
|
| Copyright © Matt Yeung | Powered by: 博客园 模板提供:沪江博客 |