一个用泛型隐式传递权限关键字的方法

最近和IBM在重新做公司的平台,其中涉及多租户问题,之前处理多租户数据隔离时考虑很简单,直接把权限关键字作为每个方法的参数传递给DAO。带来的问题是在编码过程中有部分同事经常会忘记添加,维护也有些麻烦,这次就想着将这个问题给处理掉。IBM给了一个方案,可以将权限关键字写入当前执行线程中,在DAO中再从线程中取出来,但这样限定了UI层跟DAO都只能使用同一个线程,虽然暂时不会有UI层跟DAO线程不一样的情况,但总感觉有些不舒服。之前也一直在考虑是否可以通过一个公共方法来调用DAO,在公共方法中设置权限关键字,但都没有仔细的去想,今天在整理文档时突然想到用泛型不就能完美的解决这个问题么,于是就小实现了一下,是完全可以的。以下列出关键代码。

 

 DAO部分

 

复制代码
public interface IData
    {
        UserInfo MyUserInfo { getset; }
    }
 public class TestData : IData
    {
        public UserInfo MyUserInfo { getset; }

        public string TestMethod(string str)
        {
            return string.Format("Class:[TestData] Method:[TestMethod] User:[{0}] Result[{1}]", MyUserInfo.UserName, str);
        }
    }
复制代码

 

在UI层建立一个代理,用于隐藏传递用户权限关键信息

 

复制代码
    public class Proxy
    {
        public static T GetIData<T>() where T : DAL.IData, new()
        {
            var d = new T();
            //从Session获取UserInfo 并赋值给新创建的d
            d.MyUserInfo = (DAL.UserInfo)System.Web.HttpContext.Current.Session["UserInfo"];
            return d;
        }
    }
复制代码

 

 

调用实例: 例如调用TestData.TestMethod
Proxy.GetIData<TestData>().TestMethod("测试多租户");

 

posted @   二杠  阅读(1464)  评论(5编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示