根据权限创建页面上的功能按钮的一种简单有效的方法

我们在用Asp.Net设计各种Web系统时,经常要设计页面上各个功能的权限控制。比如有权限就提供某个链接入口,那么如何控制页面上的一些功能按钮的权限呢,除了在页面上根据权限设置显示属性外,我在这里提供一个简单有效的方案供参考。如果大家有更好的改进意见,欢迎交流。

      首先我们可以在系统中为每个模块页面提供一些功能配置信息,包括功能的名称、代码,这些信息很容易和我们通常用的用户角色、权限挂钩了,接着在模块页面的基类中就可以根据权限创建这些按钮或者工具条了,也就省掉了在页面上控制显示的麻烦了。

       那么页面上怎么响应这些事件呢,我们可以让这些功能事件触发时,向页面提供所触发的功能的代码,从而去处理不同的事情了。 

       您可以在这里下载详细实现Demo

       具体实现的一些局部代码如下:


None.gif [ParseChildren( true )]
None.gif
public   abstract   class  BaseLayoutControl : System.Web.UI.UserControl, System.Web.UI.INamingContainer
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
private System.Web.UI.WebControls.PlaceHolder _cmdBarHolder;
InBlock.gif
InBlock.gif    
public BaseLayoutControl()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
/**//// <summary>
InBlock.gif    
/// 命令工具条的容器控件。
ExpandedSubBlockEnd.gif    
/// </summary>

InBlock.gif    public PlaceHolder CmdBarHolder
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif        
get dot.gifreturn this._cmdBarHolder; }
ExpandedSubBlockStart.gifContractedSubBlock.gif        
set dot.gifthis._cmdBarHolder = value; }
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    
protected override void OnInit(EventArgs e) 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        CreateCommandControls();
InBlock.gif
InBlock.gif        
base.OnInit(e);
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
/**//// <summary>
InBlock.gif    
/// 创建命令按钮。
ExpandedSubBlockEnd.gif    
/// </summary>

InBlock.gif    protected virtual void CreateCommandControls() 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
if (this.CmdBarHolder != null)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            InitializeLayout(
this.CmdBarHolder);
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
/**//// <summary>
InBlock.gif    
/// 初试化页面布局。
InBlock.gif    
/// </summary>
ExpandedSubBlockEnd.gif    
/// <param name="layout"></param>

InBlock.gif    protected abstract void InitializeLayout(Control holder);
ExpandedBlockEnd.gif}

None.gif [ParseChildren( true )]
None.gif
public   class  BaseModuleControl : BaseLayoutControl
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
ContractedSubBlock.gifExpandedSubBlockStart.gif    
Fields#region Fields
InBlock.gif
InBlock.gif    
private readonly string ButtonIDFormat = "btnBase{0}";
InBlock.gif
ExpandedSubBlockEnd.gif    
#endregion

InBlock.gif
ContractedSubBlock.gifExpandedSubBlockStart.gif    
Properties#region Properties
InBlock.gif
InBlock.gif    
public void SetBaseCmdBtnVisible(string cmdName, bool bVisible)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        Button cmdBtn 
= (Button)base.CmdBarHolder.FindControl(
InBlock.gif            String.Format(
this.ButtonIDFormat, cmdName));
InBlock.gif
InBlock.gif        
if (cmdBtn != null)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            cmdBtn.Visible 
= bVisible;
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    
public void SetBaseCmdBtnOnClickScript(string cmdName, string script)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        Button cmdBtn 
= (Button)base.CmdBarHolder.FindControl(
InBlock.gif            String.Format(
this.ButtonIDFormat, cmdName));
InBlock.gif
InBlock.gif        
if (cmdBtn != null)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            cmdBtn.Attributes.Add(
"onclick", script);
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockEnd.gif    
#endregion

InBlock.gif
ContractedSubBlock.gifExpandedSubBlockStart.gif    
Override methods#region Override methods
InBlock.gif
InBlock.gif    
protected override void CreateCommandControls() 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
if (!Page.Request.IsAuthenticated)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            Security.AccessDenied();
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
base.CreateCommandControls();
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    
protected override void InitializeLayout(Control holder)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
//
InBlock.gif        
// 根据权限设置用户对该模块的操作权限设置命令按钮的显示和事件。
InBlock.gif        
//
InBlock.gif

InBlock.gif        
string strModuleCode = this.Page.Request.QueryString["Module"];
InBlock.gif        
if (strModuleCode == null || strModuleCode.Length == 0)
InBlock.gif            
return;
InBlock.gif
InBlock.gif        ArrayList accessFunctions 
= Users.GetCurrentUserModuleAccessPermissions(
InBlock.gif            Context, strModuleCode);
InBlock.gif
InBlock.gif        
if (accessFunctions != null)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
foreach (ModuleFunctionPermission func in accessFunctions)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
if (func.EnableAccess)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    holder.Controls.Add(CreateCommandButton(func));
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    
private Button CreateCommandButton(ModuleFunctionPermission func)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        Button cmdButton 
= new Button();
InBlock.gif
InBlock.gif        cmdButton.ID 
= String.Format(this.ButtonIDFormat, func.FunctionCode);
InBlock.gif        cmdButton.Text 
= func.FunctionName;
InBlock.gif        cmdButton.CausesValidation 
= false;
InBlock.gif        cmdButton.CssClass 
= "button";
InBlock.gif
InBlock.gif        cmdButton.CommandName 
= func.FunctionCode;
InBlock.gif        cmdButton.Command 
+= new CommandEventHandler(CommandButton_Command);
InBlock.gif
InBlock.gif        
return cmdButton;
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockEnd.gif    
#endregion

InBlock.gif
ContractedSubBlock.gifExpandedSubBlockStart.gif    
EventHandler#region EventHandler
InBlock.gif
InBlock.gif    
private void CommandButton_Command(object sender, CommandEventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        OnCommandButtonClick(e.CommandName);
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockEnd.gif    
#endregion

InBlock.gif
ContractedSubBlock.gifExpandedSubBlockStart.gif    
Command Messages#region Command Messages
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
protected virtual void OnCommandButtonClick(string commandName)dot.gif{}
InBlock.gif
ExpandedSubBlockEnd.gif    
#endregion

ExpandedBlockEnd.gif}

模块页面只需要继承BaseModuleControl,并且重写OnCommandButtonClick函数,就可以处理相应的功能了。
当然具体页面必须设置功能按钮显示的位置了。

转载于:https://www.cnblogs.com/avlee/archive/2005/04/02/130591.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值