using System.Collections.Generic ;
using System.Data ;
using System.Windows.Forms ;
using Mesnac.Action.Base ;
using Mesnac.Basic ;
using Mesnac.Codd.Session ;
using Mesnac.Controls.Base ;
namespace Mesnac.Action.Default.Purview
{
/// <summary>
/// 窗体控件的用户权限处理类
/// 创建人:郑立兵
/// 创建时间: 2013-7-24
/// 说明:根据登录用户的权限处理窗体内的控件是否可用
/// </summary>
public class CheckPurviewControl : DatabaseAction , IAction
{
public void Run ( RuntimeParameter runtime )
{
base . RunIni ( runtime ) ; //必须调用
ICSharpCode . Core . LoggingService < CheckPurviewControl > . Debug ( "通用方法——窗体中权限控件的处理" ) ;
if ( runtime . Sender = = null | | ! runtime . Sender . GetType ( ) . IsSubclassOf ( typeof ( Form ) ) )
{
return ; //sender不是功能Form
}
if ( ! ( runtime . Sender as IPurviewControl ) . MCPurview )
{
return ; //窗体不验证权限
}
if ( UserInfo . Instance . RoleGUID = = "-mesnac" )
{
return ; //超级用户
}
DbHelper dbHelper = NewDbHelper ( Mesnac . Basic . DataSourceFactory . MCDbType . Local ) ;
if ( dbHelper = = null )
{
return ;
}
dbHelper . ClearParameter ( ) ;
dbHelper . CommandType = CommandType . Text ;
string strSql = "SELECT TA.GUID, TA.PermissionItemGUID, TA.PermissionType,tb.formname,formtext,tc.functionname FROM BasRolePermission TA INNER JOIN BasFormFunction TC ON TA.PermissionItemGUID=TC.GUID AND TA.PermissionType=TC.FunctionType left join BasForm TB on tc.FormGUID=tb.GUID WHERE TC.DeleteFlag='0' AND TC.DeleteFlag='0' AND TA.RoleGUID=@RoleGUID;" ;
dbHelper . AddParameter ( "@RoleGUID" , UserInfo . Instance . RoleGUID ) ;
dbHelper . CommandText = strSql ;
DataTable dt = dbHelper . ToDataTable ( ) ;
string Formname = string . Empty ;
if ( base . GetThisOwer ( ) is Form )
{
Formname = ( base . GetThisOwer ( ) as Form ) . Name ;
}
List < IPurviewControl > listPC = GetAllMCPurviewControls ( ) ;
foreach ( IPurviewControl control in listPC )
{
if ( control . MCPurview & & ! control . GetType ( ) . IsSubclassOf ( typeof ( Form ) ) )
{
control . MCEnabled = false ;
if ( dt . Select ( string . Format ( "formname='{0}' AND functionname='{1}'" , Formname , ( control as Control ) . Name ) ) . Length > 0 )
{
control . MCEnabled = true ;
}
}
}
}
}
}