You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
224 lines
7.5 KiB
C#
224 lines
7.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using NLog;
|
|
using POSV.Common.Util;
|
|
using POSV.Component;
|
|
using POSV.Entity;
|
|
using POSV.ShoppingCart;
|
|
using POSV.Utils;
|
|
|
|
namespace POSV
|
|
{
|
|
public partial class AuthDialogForm : BusinessForm
|
|
{
|
|
private Tuple<decimal , decimal , List<string> , Worker> _authz = null;
|
|
|
|
private readonly OrderObject _orderObject;
|
|
|
|
|
|
/// <summary>
|
|
/// 同步线程调用是通过该字段判断是否成功授权
|
|
/// </summary>
|
|
private readonly string _permissionCode;
|
|
|
|
public bool IsAccredit = false;
|
|
|
|
public AuthDialogForm(string title ,string permissionCode, OrderObject orderObject)
|
|
{
|
|
InitializeComponent();
|
|
|
|
this._orderObject = orderObject;
|
|
|
|
this._permissionCode = string.IsNullOrEmpty(permissionCode) ? "" : permissionCode;
|
|
|
|
this.authPanel.SetFocus();
|
|
this.authPanel.SetTitle(title);
|
|
this.authPanel.ExpectValidate();
|
|
|
|
//定义授权界面的操作事件
|
|
this.authPanel.ButtonClick += OnAuthzButtonClick;
|
|
}
|
|
|
|
public void ExpectValidate(string permissionCode , decimal expectDiscountRate = decimal.MaxValue , decimal expectFreeAmount = decimal.MaxValue)
|
|
{
|
|
this.authPanel.ExpectValidate(permissionCode, expectDiscountRate,expectFreeAmount);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 授权事件
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void OnAuthzButtonClick(object sender , AuthEventArgs e)
|
|
{
|
|
switch (e.Action)
|
|
{
|
|
case AuthAction.Close:
|
|
case AuthAction.Cancel:
|
|
{
|
|
OnControlBoxCloseClick(sender , EventArgs.Empty);
|
|
}
|
|
break;
|
|
case AuthAction.Accept:
|
|
{
|
|
if (e.Data is Tuple<decimal , decimal , List<string> , Worker>)
|
|
{
|
|
this._authz = e.Data as Tuple<decimal , decimal , List<string> , Worker>;
|
|
|
|
//授权人拥有该功能
|
|
if(this._authz != null && this._authz.Item3.Contains(_permissionCode))
|
|
{
|
|
var logInfo = string.Format("操作由[{0},{1}]授权" , this._authz.Item4.No , this._authz.Item4.Name);
|
|
|
|
LogUtils.WriteLog(LogAction.授权操作 , logInfo , this._authz.Item4.No , this._orderObject == null ? string.Empty : this._orderObject.TradeNo, this._orderObject == null ? 0 : this._orderObject.DiscountAmount);
|
|
|
|
this.OnAcceptButtonClick(new TransparentEventArgs(TransparentAction.Accept , e.KeyCode , e.Data));
|
|
|
|
this.IsAccredit = true;
|
|
|
|
OnControlBoxCloseClick(sender , EventArgs.Empty);
|
|
}
|
|
else
|
|
{
|
|
this.authPanel.ShowMessage(string.Format("授权人[{0}]没有该权限", this._authz.Item4.No) , true);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void OnControlBoxCloseClick(object sender , EventArgs e)
|
|
{
|
|
if (this.Owner != null)
|
|
{
|
|
this.Owner.Close();
|
|
}
|
|
this.Close();
|
|
}
|
|
}
|
|
|
|
|
|
public class AuthzUtils
|
|
{
|
|
private static Logger logger = NLog.LogManager.GetCurrentClassLogger();
|
|
|
|
private static object _lock = new object();
|
|
|
|
private static AuthzUtils _instance = null;
|
|
|
|
public static AuthzUtils Instance
|
|
{
|
|
get
|
|
{
|
|
if (_instance == null)
|
|
{
|
|
lock (_lock)
|
|
{
|
|
_instance = new AuthzUtils();
|
|
}
|
|
}
|
|
|
|
return _instance;
|
|
}
|
|
}
|
|
|
|
public Tuple<bool , string> CheckAuthz(Control overlay , string title , string permissionCode , Action action)
|
|
{
|
|
bool isGo = true;
|
|
|
|
string message = "权限校验成功";
|
|
|
|
//是否启用授权窗口
|
|
var isAuthz = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CASHIER_AUTO_LOCK_DISABLE , false);
|
|
|
|
//没有按钮权限
|
|
if (isGo && !isAuthz)
|
|
{
|
|
message = "您目前没有操作该功能的权限!";
|
|
isGo = false;
|
|
}
|
|
|
|
|
|
|
|
if (isGo)
|
|
{
|
|
//有权限
|
|
if (Global.Instance.HasPermission(permissionCode))
|
|
{
|
|
action();
|
|
}
|
|
else
|
|
{
|
|
var authForm = new AuthDialogForm(title , permissionCode , null);
|
|
authForm.ExpectValidate(permissionCode);
|
|
authForm.AcceptButtonClick += (o , args) =>
|
|
{
|
|
if (args.Data is Tuple<decimal , decimal , List<string> , Worker>)
|
|
{
|
|
action();
|
|
}
|
|
};
|
|
|
|
authForm.CancelButtonClick += (o , args) => { };
|
|
TransparentForm trans = new TransparentForm(overlay , authForm);
|
|
trans.Show(overlay);
|
|
}
|
|
}
|
|
|
|
return new Tuple<bool , string>(isGo , message);
|
|
}
|
|
|
|
public Tuple<bool , string> CheckAuthz(Control overlay , ModuleKeyCode keyCode , string permissionCode , OrderObject orderObject , Action<Tuple<decimal , decimal , List<string> , Worker>> action)
|
|
{
|
|
bool isGo = true;
|
|
string message = "权限校验成功";
|
|
|
|
//是否启用授权窗口
|
|
var isAuthz = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CASHIER_AUTO_LOCK_DISABLE , false);
|
|
|
|
//没有按钮权限
|
|
if (isGo && !isAuthz)
|
|
{
|
|
message = "您目前没有操作该功能的权限!";
|
|
isGo = false;
|
|
}
|
|
|
|
if (isGo)
|
|
{
|
|
//有权限
|
|
if (Global.Instance.HasPermission(permissionCode))
|
|
{
|
|
action(null);
|
|
}
|
|
else
|
|
{
|
|
var authForm = new AuthDialogForm(keyCode.ToString() , permissionCode , orderObject);
|
|
authForm.ExpectValidate(permissionCode);
|
|
authForm.AcceptButtonClick += (o , args) =>
|
|
{
|
|
if (args.Data is Tuple<decimal , decimal , List<string> , Worker>)
|
|
{
|
|
var authz = args.Data as Tuple<decimal , decimal , List<string> , Worker>;
|
|
action(authz);
|
|
}
|
|
};
|
|
|
|
authForm.CancelButtonClick += (o , args) => { };
|
|
TransparentForm trans = new TransparentForm(overlay , authForm);
|
|
trans.Show(overlay);
|
|
}
|
|
}
|
|
|
|
return new Tuple<bool , string>(isGo , message);
|
|
}
|
|
}
|
|
}
|