這是非常好的問題一下去年我心中最好的方式。 。這是我想到的,它有點冗長,但我希望這可以幫助..
首先,你將不得不看看在Asp.net ControlAdapters。
http://www.asp.net/cssadapters/WhitePaper.aspx
概述: 1.創建您要啓用和基於角色的禁用控制型控制適配器。 2.在asp.net控件上應用一些屬性,指定哪些角色可以訪問該控件。
在asp.net頁面嘗試這樣
<asp:TextBox ID="TextBox1" runat="server" CRAN="1"></asp:TextBox>
這裏CRAN一些事情是我的自定義屬性和是角色ID可以訪問頁面上此控制。
現在是時候創建一個控制適配器,它將根據角色啓用/禁用此控件。
public class TextBoxAdapter:
System.Web.UI.WebControls.Adapters.WebControlAdapter
{
protected override void OnLoad(EventArgs e)
{
if (this.Page is ISecurable)
{
WebControl tb = this.Control as WebControl;
string roles = tb.Attributes[Constants.ControlRoleAttributeName];
bool result = true;
if (!string.IsNullOrEmpty(roles))
{
result = false;
string[] role = roles.Split(',');
foreach (string r in role)
{
if (Roles.IsUserInRole(r))
{
result = true;
}
}
}
tb.Enabled = result;
//tb.BackColor = Color.Red;
}
base.OnLoad(e);
}
}
這是我創建的控制適配器將啓用/禁用基於角色的控制。你可以修改這個顯示/隱藏控制。
你將有一個.browser文件
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType ="System.Web.UI.WebControls.TextBox" adapterType="MyProject.ControlAdapter.TextBoxAdapter" />
</controlAdapters>
</browser>
</browsers>
結論登記在asp.net的App_Browser文件夾此控件適配器: 你將不得不只爲了顯示元素上應用的屬性隱藏。我已經爲Textbox創建了適配器,您可以嘗試創建一些通用適配器,如WebControl/Control。
問候。
感謝您的興趣..但我已經有辦法做到這一點(請閱讀Shoaib Shaikh的答案)..我想這樣做只基於角色......無論如何感謝您的興趣.. :) – 2012-01-03 07:44:59