• 发货源资源网

    [质量:5|效率:5|态度:5 ]

  • 当前位置:首页 > 源码集市 > 新知实践 >
    收藏商品 分享到:
    举报
    AppBoxPro细粒度通用权限管理框架源码
    • 售  价:
    • 免费
    • 语  言:
    • C#
    • 数 据 库:
    • SQL2005
    • 品  牌:
    • WebForm
    • 最后更新:
    • 2014-10-17 15:10:35
    • 大  小:
    • 19.45MB MB
    • 演示网站:

      自动发货商品,随时可以购买,零等待。

      购买本商品,交易成功后可获赠积分。

      担保交易,有问题不解决24小时内可申请退款,安全保证。

    商品详情 交易评价 交易规则

    发货源资源网

    • 16Aspx源码必读.txt[8.12KB]
    • AppBoxPro.sln[0.90KB]
    • AppBoxPro.v12.suo[3.50KB]
    • from.gif[2.69KB]
    • 最新Asp.Net源码下载.url[0.17KB]
    • 说明.txt[1.51KB]

    1. AppBox架构分析
    AppBox中的权限管理涉及几个概念:角色、用户、权限、页面

    角色:用来对用户进行分组,权限实际上是和角色对应的
    用户:一个用户可以属于多个角色
    权限:顶级权限列表,比如“CoreDeptView”的意思是部门浏览权限,为了方便权限管理,我们还给权限一个简单的分组
    页面:用户操作的载体,一个页面可以拥有多个权限,这个控制是在页面代码中进行的,主动权在页面
     
    2. 权限与页面、角色的关系
    2.1 权限与页面:之前我们提到页面拥有哪些权限,这个定义是在页面代码中的,而不是存在于数据库中。

    这就提供更大程序的灵活性,相当于每个页面都可以从整个站点的权限集合中选择自己需要的权限。

    比如,部门列表页面(dept.aspx),我们需要应用“部门浏览权限”,这个代码是定义在 dept.aspx.cs 中的:

    public partial class dept : PageBase
    {
     
        /// <summary>
        /// 本页面的浏览权限,空字符串表示本页面不受权限控制
        /// </summary>
        public override string ViewPower
        {
            get
            {
                return "CoreDeptView";
            }
        }
    由于“浏览权限”每个页面都可能会用到,所以我们将处理“浏览权限”的代码放在基类 PageBase.cs 中:

    public class PageBase : System.Web.UI.Page
    {
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
     
            // 此用户是否有访问此页面的权限
            if (!CheckPowerView())
            {
                CheckPowerFailWithPage();
                return;
            }
     

    在 CheckPowerView 中,则需要拿到当前登陆用户所属的角色,然后查找此角色是否拥有 “CoreDeptView” 权限的定义:

    /// <summary>
    /// 检查当前用户是否拥有当前页面的浏览权限
    /// 页面需要先定义ViewPower属性,以确定页面与某个浏览权限的对应关系
    /// </summary>
    /// <returns></returns>
    protected bool CheckPowerView()
    {
        return CheckPower(ViewPower);
    }
     
    /// <summary>
    /// 检查当前用户是否拥有某个权限
    /// </summary>
    /// <param name="powerType"></param>
    /// <returns></returns>
    protected bool CheckPower(string powerName)
    {
        // 如果权限名为空,则放行
        if (String.IsNullOrEmpty(powerName))
        {
            return true;
        }
     
        // 当前登陆用户的权限列表
        List<string> rolePowerNames = GetRolePowerNames();
        if (rolePowerNames.Contains(powerName))
        {
            return true;
        }
     
        return false;
    }
     

    还要注意一点:两个页面可能需要用到同一个权限

    并且这个权限出现在页面中的逻辑会截然不同,比如“CoreDeptEdit”权限(编辑部门):

    在dept.aspx页面,用来控制表格行内按钮的启用禁用状态:

    protected void Grid1_PreDataBound(object sender, EventArgs e)
    {
        // 数据绑定之前,进行权限检查
        CheckPowerWithWindowField("CoreDeptEdit", Grid1, "editField");
        CheckPowerWithLinkButtonField("CoreDeptDelete", Grid1, "deleteField");
    }
     

    在dept_edit.aspx页面,用来控制对此页面的浏览权限:

    public partial class dept_edit : PageBase
    {
        public override string ViewPower
        {
            get
            {
                return "CoreDeptEdit";
            }
        }
     

    2.2 权限与角色:这个对应关系是定义在数据库中的,相应的页面操作界面如下所示。

    3. 将权限控制到表格行内按钮
    经过上面的介绍,我们对AppBox中的权限控制有个大致的了解。

    下面,我们通过一个小案例来介绍如何将权限控制到表格行内按钮,还是以“CoreDeptEdit”这个权限为例。

     
    3.1. 首先管理员(admin)登陆

    3.2. 新建一个角色(测试角色)

    3.3. 一个属于本角色用户(testuser)

    3.4. 将 testuser 添加到测试角色

    3.5. 为测试角色设置权限(注意,“编辑部门”权限没有选中)

    3.6. 用新创建的用户 testuser 登陆

    3.7. 新用户 testuser 没有编辑部门的权限


    关键代码(更加详细的实现,请自行下载全部源代码):

    在 dept.aspx.cs 中:

    public partial class dept : PageBase
    {
        protected void Grid1_PreDataBound(object sender, EventArgs e)
        {
            // 数据绑定之前,进行权限检查
            CheckPowerWithWindowField("CoreDeptEdit", Grid1, "editField");
           
     

    在 PageBase.cs 中:

     
    public class PageBase : System.Web.UI.Page
    {
        protected void CheckPowerWithWindowField(string powerName, FineUIPro.Grid grid, string columnID)
        {
            if (!CheckPower(powerName))
            {
                CheckPowerFailWithWindowField(grid, columnID);
            }
        }
     
        protected void CheckPowerFailWithWindowField(FineUIPro.Grid grid, string columnID)
        {
            FineUIPro.WindowField btn = grid.FindColumn(columnID) as FineUIPro.WindowField;
            btn.Enabled = false;
            btn.ToolTip = CHECK_POWER_FAIL_ACTION_MESSAGE;
        }
     

     
    小结
    AppBox的权限控制非常灵活和简单,并且提供细粒度到页面上的每个角落,不仅仅是页面浏览、编辑、删除、新增,甚至可以是某个特定按钮的启用禁用、某个DIV的显示隐藏、某个面板的折叠展开,其实控制权就在你的手里面。

    交易评价
      (0)
      <

      1/5

      >
    交易规则
    • 交易流程
    • 发货方式
    • 1、自动:在上方保障服务中标有自动发货的商品,拍下后,将会自动收到来自卖家的商品获取(下载)链接;

      2、手动:未标有自动发货的的商品,拍下后,卖家会收到邮件、短信提醒,也可通过QQ或订单中的电话联系对方。

    • 退款说明
    • 1、描述:源码描述(含标题)与实际源码不一致的(例:描述PHP实际为ASP、描述的功能实际缺少、版本不符等);

      2、演示:有演示站时,与实际源码小于95%一致的(但描述中有"不保证完全一样、有变化的可能性"类似显著声明的除外);

      3、发货:手动发货源码,在卖家未发货前,已申请退款的;

      4、服务:卖家不提供安装服务或需额外收费的(但描述中有显著声明的除外);

      5、其他:如质量方面的硬性常规问题等。

      注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。交易中的商品,卖家无法对描述进行修改!

    • 注意事项
    • 1、在未拍下前,双方在QQ上所商定的内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准);

      2、在商品同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外);

      3、在没有"无任何正当退款依据"的前提下,写有"一旦售出,概不支持退款"等类似的声明,视为无效声明;

      4、虽然交易产生纠纷的几率很小,但请尽量保留如聊天记录这样的重要信息,以防产生纠纷时便于16Aspx源码介入快速处理。

    • 16Aspx源码声明
    • 1、16Aspx源码作为第三方中介平台,依据交易合同(商品描述、交易前商定的内容)来保障交易的安全及买卖双方的权益;

      2、非平台线上交易的项目,出现任何后果均与16Aspx源码无关;无论卖家以何理由要求线下交易的,请联系管理举报。

  • 宝贝数量:7423
  • 创店时间:2017/5/26 16:11:00
  • 联系客服

    330199865

    店内搜索
  • 商品:
  • 价格: -
  • 本店销量榜

    1微信公众平台Bee.WeiXin开发源码

    2BS拖拽工作流设计及研发源码

    3通用权限管理系统(含文档、数据库)源码

    4Easyui之权限系统源码

    5ASP.NETMVC+EF框架+EasyUI实现权限管理源码

    6通用OA系统增强源码

    7Entity Framework4.1+MVC3+Jquery EasyUI的DEMO源码

    8基于FineUI的通用权限管理框架源码

    9WPF仿迅雷7界面UI效果

    10WEB在线流程图设计器GOOFLOW源码

    广而告之