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

本文介绍了一种改进的多租户数据隔离方法,通过在UI层建立泛型代理类来传递用户权限信息,简化了编码过程并提高了系统的可维护性。

最近和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("测试多租户");

 

转载于:https://www.cnblogs.com/vanjoge/archive/2012/07/23/2605338.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值