nopcommerce中文网

nopcommerce是国外asp.net领域一个高质量的b2c开源项目,基于EntityFramework和MVC开发,QQ群1:75272942(2000人超级群,已满) QQ群2:640322459

导航 - 搜索

nopcommerce之权限模块

这篇文章简单介绍一下nopcommerce的权限模块,nopcommerce里面的权限设计相对比较简单,主要针对后台的action和前台的是否显示(比如产品、品牌等),虽然简单但是应付一般的项目应该没问题。

你只需要关注三张表:

1、AclRecord(访问控制表,比如控制某个产品某种角色前台是否可见)

2、PermissionRecord(权限表)

3、PermissionRecord_Role_Mapping(权限角色关联表)

AclRecord:

后台添加编辑产品或者品牌的时候你一定会看到有个标签叫做访问控制,如下图所示:

如果启用了并且选了对应的角色,那么保存的时候就会往这张表里面添加记录,其中EntityName是几个固定的,比如Product等,当然你也可以扩展,读取的时候就会关联到这张表进行查询,如图所示:

PermissionRecord和PermissionRecord_Role_Mapping是针对当前用户所属角色的,这部分主要用于后台,如果你看了代码你会发现后台controller里面每个action里面几乎都有类似代码,没有权限的话会返回空值或者跳转到没有权限的提示页面,如图所示:

那么如何添加自己的权限呢,首先找到Nop.Services\Security\StandardPermissionProvider.cs,参考上面的添加一条记录,别忘了GetPermissions()也要添加,还有数据库里面的表PermissionRecord添加记录,最后一步,在后台访问控制页面给每个角色设置权限。

教你一招 - 如何给nopcommerce增加一个类似admin的area

asp.net mvc里面的area是什么,点击这里查看

 如果在nopcommerce里面加入类似admin的area,步骤如下:

1、新建一个mvc空项目MvcApplication1,位置放在\Nop.Web下面,添加一个类MvcApplicationAreaRegistration.cs用于注册area,内容如下:

using System.Web.Mvc;

namespace MvcApplication1
{
    public class MvcApplicationAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "MvcApplication1";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "MvcApplication1_default",
                "MvcApplication1/{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", area = "MvcApplication1", id = "" },
                new[] { "MvcApplication1.Controllers" }
            );
        }
    }
}
2、修改MvcApplication1/Views/_ViewStart.cshtml,内容如下:
@{
    Layout = "~/MvcApplication1/Views/Shared/_Layout.cshtml";
}
如果不修改的话会提示找不到view的。
3、添加一个HomeController和对应的视图,这里不再详细说明。
4、修改MvcApplication1输出路径,改为:..\bin\,要不然是找不到dll的。
5、删除Global.asax文件,删除web.config里面不需要的内容,可参考admin下面的config文件。
6、最后关键一步,修改Nop.Web.Framework\Themes\ThemeableVirtualPathProviderViewEngine.cs的方法GetPath,添加如下内容:
if (!string.IsNullOrEmpty(areaName) && areaName.Equals("mvcApplication1", StringComparison.InvariantCultureIgnoreCase))
            {
                //admin area does not support mobile devices
                if (mobile)
                {
                    searchedLocations = new string[0];
                    return string.Empty;
                }
                var newLocations = areaLocations.ToList();
                newLocations.Insert(0, "~/MvcApplication1//Views/{1}/{0}.cshtml");
                newLocations.Insert(0, "~/MvcApplication1//Views/{1}/{0}.vbhtml");
                newLocations.Insert(0, "~/MvcApplication1//Views/Shared/{0}.cshtml");
                newLocations.Insert(0, "~/MvcApplication1//Views/Shared/{0}.vbhtml");
                areaLocations = newLocations.ToArray();
            }
重新编译测试一下吧,地址http://localhost:2619/MvcApplication1/Home。