吉日嘎啦权限系统之学习心得之一<按钮权限>

有了吉日大师的源码也差不多一年之久,从v3.5 到v3.7已有三个版本,v3.5中的好多丑陋代码到v3.7已经有很大的优化,代码层次也分了很清楚,对我们这些菜鸟学习来说绝对有很大的提高,由于杂事多多,没有自己研究里面的代码,但粗糙看了一遍后,发现里面好多功能还有很多不足之处,从按钮权限说起。

通用权限系统按钮权限控制是在后台写死的,有什么按钮,就在后台根据登陆的用户名判断是否有其权限,代码如下:

      this.permissionAccess = this.IsModuleAuthorized("StaffAdmin");  // 访问权限

            this.permissionAdd = this.IsAuthorized("StaffAdmin.Add");     // 新增权限

            this.permissionEdit = this.IsAuthorized("StaffAdmin.Edit");    // 编辑权限

            this.permissionDelete = this.IsAuthorized("StaffAdmin.Delete");  // 删除权限

            this.permissionExport = this.IsAuthorized("StaffAdmin.Export");  // 导出权限

IsModuleAuthorized(”StaffAdmin”)是继承窗体的一个方法,每个窗体都继承这个基窗体,参数是权限名,从而窗体一行代码很容易就判断该用户是否有相应的按钮权限,看似很简单,但如果页面新增了按钮或删除了按钮,如果有很多按钮又如何控制……..?每次修改后台代码虽然不是很繁琐。但也让人不爽。

 

如何更好的改进按钮权限,我目前想到的是对按钮进行封装,按钮是否能用,只和用户有关系,如果用户有控制按钮的权限enable=true否则就是enable=false,和页面没有关系。

以b/s 模式的 button 控件为例,来讨论如何将按钮和用户权限控制起来。

普通的button控件,不能满足我们的要求,所以我们要实现一个PermissionButton控件,该控件继承button ,我们可以在OnPreRender事件中判断按钮是否可用。效果如下。

[ToolboxData("<{0}:PermissionButton runat=\"server\" Text=\"权限按钮\"></{0}:PermissionButton>")]

public class PermissionButton:Button

{

     protected override void OnPreRender(EventArgs e)

        {

            if (!CheckPermission())

            {

                  this.Enabled = false;

            }

           Else

           {

                 this.Enabled = true;;

 

           }

 

            base.OnPreRender(e);

        }

 

  public bool CheckPermission()

        {

            if (PContext.Current.User.IsSuperAdmin || (!string.IsNullOrEmpty(this.m_OperationCode) &&PContext.Current.User.HasPermission (this.m_OperationCode)))

            {

                return true;

            }

 

            return false;

        }

}

 

说明:m_OperationCode 作为按钮的权限属性,如:M_OperationCode=“StaffAdmin”

现在我们只需用PermissionButton 就可以了。后台不用在做判断了。

你可能感兴趣的:(权限系统)