• CSLA.NET权限规则的困惑


    CSLA.NET中的权限规则是通过AuthorizationRules类实现的,如AllowGet()方法,就是允许读取。

    以下是我在项目中的使用,是一个品牌的不可编辑类:

    //页面的菜单代码

    public static readonly string MenuCode = "Brand";

    为MenuCode添加读取权限:

    protected static void AddObjectAuthorizationRules()
    {
        AuthorizationRules.AllowGet(
    typeof(Brand), RolesCommand.GetRoles(MenuCode, "Get").ToArray());
    }

    RolesCommand.GetRoles()方法:得到为菜单代码设置的角色列表。

    这样,在页面读取该类的数据时, 若登录用户所在的角色没有读取"Brand"的权限 ,则产生System.Security.SecurityException的异常,捕获该异常后就可提示用户没有权限读取数据。

    这种方法结合页面使用是没有问题的,而且非常好用。

    但是,大家都知道,我们的业务是需要互相调用的,比如:在员工的业务中,会调用部门的数据以便显示员工所在的部门,使用上述方法后,如果登录用户没有读取部门数据的权限,那么在代码执行到获取部门信息时,就会产生SecurityException。其实用户在员工页面是应该看到员工的部门信息的。

    这样的话,也就是业务代码互相调用时,也需要权限,产生了这样的问题。

    后面我们的解决方法是:在业务类去掉了权限验证,将验证代码写在了前台的代码中。

    但我觉得,我们的解决方法没有发挥出CSLA关于权限验证的作用,看大家有什么好的做法?

  • 相关阅读:
    Codeforces 631D Messenger KMP
    Google Codejam 2016 Round1A Problem C BFFs 简单图论
    ACM常用数论知识 总结
    C++ 虚函数表
    HDU 5661 Claris and XOR 贪心
    2013亚洲区域赛长沙站 ZOJ 3732 Graph Reconstruction
    [C++] upper_bound和lower_bound
    2015合肥网络赛 HDU 5489 Removed Interval LIS+线段树(树状数组)
    hdu 3532 Max Angle(atan2的使用)
    poj 1106 Transmitters (计算几何,叉积||极角排序)
  • 原文地址:https://www.cnblogs.com/brawei/p/1783862.html
Copyright © 2020-2023  润新知