C# 实现 在 WinForm 和 WebForm 中的权限控制

原创 2004年10月29日 09:39:00

using System;
using System.Data;
using System.Collections;

namespace XSTBD.Common.Right
{
 /// <summary>
 /// Action 的摘要说明。
 /// </summary>
 public class Action
 {
  private string m_ActionName;
  private bool   m_ActionEnabled = true;
  private DataSet m_dsRights;
  private Hashtable m_ActionObjHT;
  private ArrayList m_ActionList;

  /// <summary>
  /// 操作
  /// </summary>
  public Action()
  {
   ResetAction();
  }

  public Action(string actionName,bool actionEnabled)
  {
   this.m_ActionName = actionName;
   this.m_ActionEnabled = actionEnabled;
   ResetAction();
  }

  public Action(string actionName)
  {
   this.m_ActionName = actionName;
   this.m_ActionEnabled = false;
   ResetAction();
  }
  /// <summary>
  /// 操作名称
  /// </summary>
  public string ActionName
  {
   get
   {
    return this.m_ActionName;
   }
   set
   {
    this.m_ActionName = value;
   }
  }

  /// <summary>
  /// 操作使能状态
  /// </summary>
  public bool ActionEnabled
  {
   get
   {
    return this.m_ActionEnabled;
   }
   set
   {
    this.m_ActionEnabled = value;
   }
  }

  /// <summary>
  /// Action 对应操作对象表
  /// </summary>
  public Hashtable ActionObjHT
  {
   get
   {
    return this.m_ActionObjHT;
   }
   set
   {
    this.m_ActionObjHT = value;
   }
  }
  /// <summary>
  /// Action 中包含的子Action
  /// </summary>
  public ArrayList ActionList
  {
   get
   {
    return this.m_ActionList;
   }
   set
   {
    this.m_ActionList = value;
   }
  }

  /// <summary>
  /// 权限集和
  /// </summary>
  public DataSet DsRights
  {
   get
   {
    return this.m_dsRights;
   }
   set
   {
    this.m_dsRights = value;
   }
  }
  public void AddAction(Action action)
  {
   m_ActionList.Add(action);
  }
  /// <summary>
  /// 重新设置Action
  /// </summary>
  private void ResetAction()
  {
   m_ActionObjHT = new Hashtable();
   m_ActionList = new ArrayList();

  }
  /// <summary>
  /// 添加操作对象
  /// </summary>
  /// <param name="obj">操作对象</param>
  /// <param name="objType">对象类型</param>
  public void AddActionObj(Object obj,Type objType)
  {
   m_ActionObjHT.Add(obj,objType);
  }

  /// <summary>
  /// 设置Action的Enabled状态,同时通过Action的Enabled状态设置控件
  /// </summary>
  public void SetActionEnabled()
  {
   if(this.DsRights.Tables[0].Rows.Count > 0)
   {
    if(this.DsRights.Tables[0].Rows[0]["ActionName"].ToString() == "AllRight")//设置所有权限
    {
     SetAllActionEnabled();
     return;
    }
    for(int i = 0; i < this.DsRights.Tables[0].Rows.Count; i++)
    {
     string actionName = this.DsRights.Tables[0].Rows[i]["ActionName"].ToString();
     for(int j = 0; j < m_ActionList.Count; j++)
     {
      if(((Action)m_ActionList[j]).ActionName == actionName)
      {
       ((Action)m_ActionList[j]).ActionEnabled = true;
       break;
      }
     }
    }
   }
   SetActionObjEnabled();
  }

  private void SetAllActionEnabled()
  {
   for(int i = 0; i < this.ActionList.Count; i++)
   {
    ((Action)ActionList[i]).ActionEnabled = true;
   }
   SetActionObjEnabled();
  }
  /// <summary>
  ///  设置控件Enabled
  /// </summary>
  private void SetActionObjEnabled()
  {
   for(int i = 0; i < this.ActionList.Count; i++)
   {
    Action action = ((Action)ActionList[i]);
    IDictionaryEnumerator actionList = action.ActionObjHT.GetEnumerator();
    while(actionList.MoveNext())
    {
     Type  type = ((Type)actionList.Value);
     Object obj = ((Object)actionList.Key);
     if(type.FullName == "System.Windows.Forms.MenuItem")
     {
      bool enable = ((System.Windows.Forms.MenuItem)obj).Enabled;
      ((System.Windows.Forms.MenuItem)obj).Enabled = enable && action.ActionEnabled;
     }
     else if(type.FullName == "System.Windows.Forms.Control")
     {
      bool enable = ((System.Windows.Forms.Control)obj).Enabled;
      ((System.Windows.Forms.Control)obj).Enabled = enable && action.ActionEnabled;
     }
     else if(type.BaseType.FullName == "System.Web.UI.WebControls.WebControl")
     {
      bool enable = ((System.Web.UI.WebControls.WebControl)obj).Enabled;
      ((System.Web.UI.WebControls.WebControl)obj).Enabled = enable && action.ActionEnabled;
     }
    }
   }
  }

 }
}

以上只是简单实现,还有很多不够完善的地方,谢谢提出更好的方法和意见!

Winform和WebForm的异同

Winform和WebForm的一些比较,纯属个人观点.
  • sloder
  • sloder
  • 2011年01月16日 20:46
  • 5087

WinForm和WebForm 对Quartz定时器使用

Quartz是第三方提供的定时调度框架,其官方地址http://www.quartz-scheduler.org/ 同样,安装惯例,该篇同样也是从项目中mark出来,方便对这个技术的惯例,好了废话不说...
  • Just_shunjian
  • Just_shunjian
  • 2016年04月12日 11:20
  • 1462

C# WEBform 和 WINform之间通信

WINform端:System.Diagnostics.Process.Start(@"http://localhost:4123/WebForm1.aspx?name=" + textBox1.Te...
  • CAIYUNFREEDOM
  • CAIYUNFREEDOM
  • 2010年11月30日 09:36
  • 2636

WebForm 与 winform 路径获取

对于Windows程序 和Web 应用程序来说,他们运行的路径是不一样的,所以关键是判断当前运行的程序是哪种程序.于是我们可以使用如下的代码   string path ="";           ...
  • xiaogaolin
  • xiaogaolin
  • 2010年10月25日 14:18
  • 5108

C# WebForm <%%>用法

C# WebForm中用法 参考内容: http://www.cnblogs.com/nidakun/archive/2012/07/17/2595779.html 用于在前端执行后台代码, 或取...
  • hellozhangyanlin
  • hellozhangyanlin
  • 2017年12月21日 11:55
  • 70

WebForm、WinForm、Win32、asp.net、C#、.NET Framework和.net

一、WebForm、WinForm、Win32之间关系 1.WebForm    WebForm是.net中用于开发web应用的一系列技术的通称。特点是使用统一的UI,就是web页面,统一...
  • u012092924
  • u012092924
  • 2017年12月25日 14:03
  • 123

B/S C/S在WinForm程序中嵌入ASP.NET WebForm应用程序

B/S C/S在WinForm程序中嵌入ASP.NET WebForm应用程序   现在的流行趋势是桌面程序Web化,Web程序桌面化,呵呵。最终目标就是你中有我,我中有你。例如MSN Explore...
  • zfrong
  • zfrong
  • 2009年03月11日 14:03
  • 3875

[WinFrom]NET中winform与webform互相通讯实例,CS调用BS页面的JS函数

大家都知道.NET可以开发winform与webform页面,有时候在开发项目过程中要结合BS+CS这样来应用,那么本站做一个实例来测试winform与webform互相通讯的实例,下面先看下效果: ...
  • david_520042
  • david_520042
  • 2011年02月24日 14:31
  • 2019

c#实现按用户角色分配菜单的使用权限(WinForm) 转载

c#实现按用户角色分配菜单的使用权限(WinForm)        前阵子接个WinForm应用的小程序,要求按用户的角色动态设置可以使用的菜单项(无权使用的灰色显示)。程序做完了,总...
  • best_caohit
  • best_caohit
  • 2012年08月16日 15:43
  • 2631

不用asp.net MVC,用WebForm照样可以实现MVC

在《避开WebForm天坑,拥抱ASP.Net MVC吧》这篇博客中我讲到了ASP.net WebForm由于一些先天的“诱导犯罪”的缺陷,现在用ASP.net MVC的公司越来越多。但是根据那篇文章...
  • cownew
  • cownew
  • 2015年12月25日 08:35
  • 4374
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# 实现 在 WinForm 和 WebForm 中的权限控制
举报原因:
原因补充:

(最多只允许输入30个字)