通用权限系统设计——第六章

这章紧接着第五章的内容,如果你没有看过第五章的内容,请看一下第五章所说的,因为这章跟第五章的内容联系非常紧密。

第六章主要讲解一个控件,也就是submit控件,其它控件这里我们就不做详细的介绍了,基本同理,思路都一样的。

第五章我们得到了用户所属模块的权限,这一步至关重要,也是这权限控件的灵魂。

现在进入今天的主题,添加一个类,命名为:PDButtonPD是我自己加的前缀,与C#中的button区分开来。添加完整这个类之后,总所周知,这个类得继承:System.Web.UI.ContorlSystem.Web.UI.IPostBackEventHandler,然后我们在PermissionEnum枚举类中再加上一个枚举,代码如下:

public enum PermissionEnum
{
    …
    /// <summary>
    /// 没有任何权限
    /// </summary>
    NoAuthority
}

 

这里的用处是什么了?这里就是确保每个按钮在没有添加权限的情况下面,都让他保存没有任何权限,这个枚举是数据库中没有的,这里只是为了程序而声名的。主要用处是在没有添加权限属性的情况下,让这个按钮保持不能操作的状态,是为了防止出现数据上面的问题而特意做的这项工作。

加完这个枚举之后,我们在PDButton按钮中自定义一个属性,定义的属性代码如下:

View Code
private virtual PermissionEnum _permissions = PermissionEnum.NoAuthority;
/// <summary>
/// 权限属性
/// </summary>
[
Bindable(true),
Category("Appearance"),
DefaultValue(PermissionEnum.NoAuthority),
Description("无任何权限"),
Localizable(true),
]
public virtual PermissionEnum Permissions 
{ 
    get
    {
        return this._permissions;
    }
    set
    {
        this._permissions = value;
    }
}

 

还得继续定义一个属性,要不然,没法给这个控件Text属性值,所以这个我们还是比较加上的,具体代码如下:

/// <summary>
/// 按钮中的Text 属性
/// </summary>
public virtual string Text { get; set; }

      

定义的类型就是声明的枚举,定义完成这个属性之后,我们还要为这个按钮追加按钮事件。

不管怎么样,处理事件,我们第一个想到了委托,委托多方便啊,全全交由其他人完成,减少我们多少的工作量啊!

首先,我们先声明一个委托,代码如下:

public event EventHandler Click;

 

我们自己在声明一个方法,作为自定义按钮的点击事件,为了方便,我将方法命名为:OnClick,这个名称可以随便取名,只是在这里,我们为了统一和asp.net一致。

下面给出具体代码:

/// <summary>
/// 点击事件
/// </summary>
/// <param name="e"></param>
public virtual void OnClick(EventArgs e)
{
    if (this.Click != null)
    {
        this.Click(this, e);
    }
}

 

做到这里,这个按钮事件也快差不多结束了,记住,是差不多结束,并没有真正的结束掉,要想结束,其实也不难。我们这个类是不是继承了System.Web.UI.IPostBackEventHandler,我们只是继承了它,但是我们并没有实现接口里面的方法,这样是会报错的。所以下一步,我们是实现System.Web.UI.IPostBackEventHandler接口里面的方面。

代码很简单,如下:

/// <summary>
/// 处理回发事件
/// </summary>
/// <param name="eventArgument"></param>
public void RaisePostBackEvent(string eventArgument)
{
    this.OnClick(EventArgs.Empty);
}

 

到这里,我们就可以编写RenderControl里面的内容了,里面的内容,我做最简单的来完成吧,为了节省时间。

首先,也是总所周知的,这里是呈现html控件的地方(这里我就说的通俗一点),这里我们要做的是一个submit按钮,在网页上面看到的submit按钮完整的html是这样的:

<input id=" Button" type="submit"  value=" submit " name=" submit ">

这个是一个最简单的submit按钮,我们要呈现的方式也是这种,只是稍加改进一下,现在做的,我先不加权限控制,先把这个按钮呈现到页面上。

具体代码如下:

public override void RenderControl(HtmlTextWriter writer)
{
    base.RenderControl(writer);
    StringBuilder sb = new StringBuilder();
    sb.AppendFormat("<input type='submit' id='{0}' name='{1}' value='{2}'  />", this.ClientID, this.UniqueID,this.Text);
    writer.Write(sb.ToString());
}

 

ClintIDUniqueID不知道的话,或者为什么这样,你自己去查找资料吧,这里不想说了,比较简单。

做完这一切,我们编译一下,工具箱中将会出现我们这个按钮,如下图:


 

如果这里没有出现这个,你得打开一个aspx网页,然后切换到设计方式,这样才可能出现到这个工具箱来

 

好了,我们将这个控件直接拖到UserList.aspx页面上,在页面上面的代码是这样的,如下:

<cc1:PDButton ID="PDButton1" Text="测试用的权限控件" runat="server" />

 

现在我们运行网站,来看看效果吧!

 

由于这个控件没有加上还没有加是权限控制,所以,这个和普通的submit控件没有什么两样,下一步,我们就把他的权限加上。

我这里先做第一种,有这个权限,则隐藏这个按钮。

加上权限验证,其实也很简单,为什么了?因为我们第五章也就吧该做的都做好了,现在就只管拿来用了。代码如下:

public override void RenderControl(HtmlTextWriter writer)
{
    base.RenderControl(writer);
    //GetPermission就是我们第五章所写的代码,现在就只有用到这句代码就已经足够了
    Visible = ValidataPermission.GetPermission(this.Permissions);
    if (!Visible)
        return;
    StringBuilder sb = new StringBuilder();
    sb.AppendFormat("<input type='submit' id='{0}' name='{1}' value='{2}'  />", this.ClientID, this.UniqueID,this.Text);
    writer.Write(sb.ToString());
}

 

代码没有增加多少,就添加了三行代码,添加完整这三行代码还不够,aspx页面上用到的这个控件,我们起初自定义了一个属性为:Permissions,现在轮到他出场了。


 从图上可以看出,当我们添加Permissions属性之后,他会自动出现枚举中的几个选项,当我们这个按钮属于哪一个权限的时候,我就是Permissions选择哪个值,到目前为止,我们用户中这几个选项都用,所以,我们先选择NoAuthority,使他没有任何权限,然后我们在刷新网页,结果如下:

 

设置完成这个属性后,页面什么都没有显示了。

现在我们重新设置一下,选择:Add 进行测试,因为这个用户是具有添加权限的。如果用户对应的权限,你不清楚,你可以去《第三章》进行了解一下。下面直接上图:

<cc1:PDButton ID="PDButton1" Text="测试添加权限" Permissions="Add" runat="server" />

 

是不是按钮出现了?现在这个按钮非常方便了吧,不用你怎么去设置什么东西了,用起来非常的简单。

由于我还没有做到角色管理那块,不能从页面上直接分配权限,现在我只能到数据库中新添加一个用户,重新添加一个角色,是这个角色只有浏览,编辑权限。下面是我在数据中,直接加的用户,如下图:

 

用户admin4是我手动添加的用户,从上图,大家应该都很明了的看出这个用户具有的权限吧,好,现在我们以“用户列表”模块作为测试点,admin4用户在用户列表页面只具备两个权限:浏览和修改,现在我们在这个页面上面,分别把 增删改查的权限一并放下去,aspx页面上的代码如下:

<cc1:PDButton ID="btnAdd" Text="测试添加权限" Permissions="Add" runat="server" />
<cc1:PDButton ID="btnDelete" Text="测试删除权限" Permissions="Delete" runat="server" />
<cc1:PDButton ID="btnEdit" Text="测试编辑权限" Permissions="Edit" runat="server" />
<cc1:PDButton ID="btnBrowse" Text="测试浏览权限" Permissions="Browse" runat="server" />

然后浏览页面,看看效果如何: 

 

上图是admin4登录的,我们在看看admin登录的效果,请看下图:

 

其实的确很简单,大家看完之后,看见基本没有什么难度吧!

今天就到这里把,不好意思啊,第五章说好到这章,将放出源码,但是我认为现在的源码大家拿来没用,所以放出源码时间有变了,抱歉!

posted @ 2012-04-03 21:52  luxianai  阅读(931)  评论(0编辑  收藏  举报