欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET Zero--15.一个例子(8)商品分类管理-权限控制

程序员文章站 2022-03-01 20:28:21
1.添加权限常量 打开文件AppPermissions.cs 【..\MyCompanyName.AbpZeroTemplate.Core\Authorization\AppPermissions.cs】 在末尾添加如下常量: //分类管理权限 public const string Pages_C ......
1.添加权限常量 打开文件AppPermissions.cs 【..\MyCompanyName.AbpZeroTemplate.Core\Authorization\AppPermissions.cs】 在末尾添加如下常量:
//分类管理权限
public const string Pages_Category = "Pages.Category";
public const string Pages_Category_Create = "Pages.Category.Create";
public const string Pages_Category_Edit = "Pages.Category.Edit";
public const string Pages_Category_Delete = "Pages.Category.Delete";

 

2.编写代码 想在页面显示还需编写代码获取,打开文件AppAuthorizationProvider.cs 【..\MyCompanyName.AbpZeroTemplate.Core\Authorization\AppAuthorizationProvider.cs】 在SetPermissions方法最后添加如下代码:
//分类权限的获取
            var category=pages.CreateChildPermission(AppPermissions.Pages_Category, L("CategoryManager"));
            category.CreateChildPermission(AppPermissions.Pages_Category_Create, L("Category_Create"));
            category.CreateChildPermission(AppPermissions.Pages_Category_Edit, L("Category_Edit"));
            category.CreateChildPermission(AppPermissions.Pages_Category_Delete, L("Category_Delete"));

 

3.编辑语言文件 打开语言文件AbpZeroTemplate-zh-CN.xml 【..\MyCompanyName.AbpZeroTemplate.Core\Localization\AbpZeroTemplate\AbpZeroTemplate-zh-CN.xml】 在最后添加如下代码:
<text name="Category_Create" value="添加分类" />
<text name="Category_Edit" value="编辑分类" />
<text name="Category_Delete" value="删除分类" />

 

4.测试 生成项目,打开角色管理--编辑角色,效果如下: ASP.NET Zero--15.一个例子(8)商品分类管理-权限控制 基础工作已完成,接下来给页面按钮和应用层方法加权限。 客户端权限控制 1.打开Index.js文件 【..\mycompanyname.abpzerotemplate.web\areas\mpa\views\category\index.js】 添加如下代码:
var _categoryService = abp.services.app.category;
//权限
var _permissions = {
    create: abp.auth.hasPermission('Pages.Category.Create'),
    edit: abp.auth.hasPermission('Pages.Category.Edit'),
    'delete': abp.auth.hasPermission('Pages.Category.Delete')
};

 

同时修改actions里面的代码:
var $span = $('<span></span>');
                        if (_permissions.edit) {//判断是否有编辑权限
                            $('<button class="btn btn-default btn-xs" title="' + app.localize('Edit') + '"><i class="fa fa-edit"></i></button>')
                                .appendTo($span)
                                .click(function() {
                                    _editModal.open({ id: data.record.id });
                                });
                        }
                        if (_permissions.delete) {//判断是否有删除权限
                            $('<button class="btn btn-default btn-xs" title="' + app.localize('Delete') + '"><i class="fa fa-trash-o"></i></button>')
                                .appendTo($span)
                                .click(function() {
                                    deleteCategory(data.record);
                                });
                        }
                        return $span;

 

保存,打开角色管理--修改Admin角色,加上编辑分类的权限,然后保存,效果如下: ASP.NET Zero--15.一个例子(8)商品分类管理-权限控制 2.测试 然后打开分类管理页面,现在可看到删除按钮不会显示出来了,效果如下: ASP.NET Zero--15.一个例子(8)商品分类管理-权限控制   3.添加按钮加权限 现在把"添加分类"按钮也加上权限 打开Index视图【..\mycompanyname.abpzerotemplate.web\areas\mpa\views\category\index.cshtml】 修改"添加分类"按钮代码如下:
@if (IsGranted(AppPermissions.Pages_Category_Create))//判断是否有添加分类的权限
        {
            <button id="CreateNewCategoryButton" class="btn btn-primary blue"><i class="fa fa-plus"></i>添加分类</button>
        }

 ASP.NET Zero--15.一个例子(8)商品分类管理-权限控制

现在没有分类管理的任何权限只能查看。 服务端权限控制 接下来就是服务端权限的控制,服务端就是应用层和Web层,前端页面就属于客户端。 1.控制器加权限 先来给控制器加权限,打开CategoryController 【..\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Controllers\CategoryController.cs】 分别给方法头加上注释,代码如下:
[AbpMvcAuthorize(AppPermissions.Pages_Category)]
    public class CategoryController : AbpZeroTemplateControllerBase
    {
...
[AbpMvcAuthorize(AppPermissions.Pages_Category_Create)]
        public ActionResult CreateModal()
[AbpMvcAuthorize(AppPermissions.Pages_Category_Edit)]
        public ActionResult EditModal(int id)
...

 

保存,生成项目,刷新分类管理,你会发现跳转到登录页面了,这是因为我并没有给Admin角色添加分类管理的任何权限。 现在把登录连接%2FCategory这段字符删除,重新访问http://localhost:8019/Account/Login?ReturnUrl=%2Fmpa,然后登录。 登录成功后,进入角色管理--编辑Admin角色,加入分类管理的权限。效果如下: ASP.NET Zero--15.一个例子(8)商品分类管理-权限控制 现在访问分类管理,已经正常显示了。   2.方法加权限 到这里还没完,继续给应用层方法也加入权限。 打开文件CategoryAppService.cs 【..\MyCompanyName.AbpZeroTemplate.Application\CategoryApp\CategoryAppService.cs】 分别给类和几个方法加入注解,代码如下:
[AbpAuthorize(AppPermissions.Pages_Category)]
    public class CategoryAppService : AbpZeroTemplateAppServiceBase, ICategoryAppService
{
...
[AbpAuthorize(AppPermissions.Pages_Category_Create)]
        public void CreateCategory(CreateCategoryInput input)
...
[AbpAuthorize(AppPermissions.Pages_Category_Delete)]
        public void DeleteCategory(EntityRequestInput input)
...
[AbpAuthorize(AppPermissions.Pages_Category_Edit)]
        public void UpdateCategory(CreateCategoryInput input)
...

 

生成Web项目,这里不给出测试方法,但记住权限一定要加上。 3.菜单加权限 最后还有一个地方要加权限,那就是菜单 打开文件MpaNavigationProvider.cs 【..\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Startup\MpaNavigationProvider.cs】 修改分类管理菜单的代码如下:
//子菜单
                        PageNames.App.Common.Category,
                        L("CategoryManager"),
                        url:"Mpa/Category",
                        icon: "icon-globe",
                        requiredPermissionName: AppPermissions.Pages_Category//菜单权限,登录用户所在角色有此权限才会显示出来
                        ))

 

生成Web项目,打开角色管理--编辑Admin角色,把分类管理的权限去掉,保存,刷新页面。 ASP.NET Zero--15.一个例子(8)商品分类管理-权限控制 会发现商店菜单已经不显示了,可能你会疑惑为什么连商店菜单都不显示呢?这是因为商店菜单只有分类管理一个子菜单,如果有多个子菜单时,商店菜单就会显示出来。 ASP.NET Zero--15.一个例子(8)商品分类管理-权限控制 现在,整个分类管理功能终于完成。通过这个例子,我尽量通过最简单的方式去实现,不管是自己做笔记还是让他人学习,都比较易懂。