ASP.NET Zero--15.一個例子(8)商品分類管理-許可權控制

来源:http://www.cnblogs.com/shensigzs/archive/2017/01/21/6305861.html
-Advertisement-
Play Games

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.測試

生成項目,打開角色管理--編輯角色,效果如下: 基礎工作已完成,接下來給頁面按鈕和應用層方法加許可權。

客戶端許可權控制

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角色,加上編輯分類的許可權,然後保存,效果如下:

2.測試

然後打開分類管理頁面,現在可看到刪除按鈕不會顯示出來了,效果如下:  

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>
        }

 

現在沒有分類管理的任何許可權只能查看。

服務端許可權控制

接下來就是服務端許可權的控制,服務端就是應用層和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角色,加入分類管理的許可權。效果如下: 現在訪問分類管理,已經正常顯示了。  

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角色,把分類管理的許可權去掉,保存,刷新頁面。 會發現商店菜單已經不顯示了,可能你會疑惑為什麼連商店菜單都不顯示呢?這是因為商店菜單隻有分類管理一個子菜單,如果有多個子菜單時,商店菜單就會顯示出來。 現在,整個分類管理功能終於完成。通過這個例子,我儘量通過最簡單的方式去實現,不管是自己做筆記還是讓他人學習,都比較易懂。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近在複習Servlet,發現其中有很多細節方面的東西都沒有接觸到,只是學了大概 1.請求轉發和請求重定向的區別 2.輸入參數為中文時候的亂碼問題 3.Web工程中的目錄寫法 下麵分別闡述 1.請求轉發和請求重定向的區別 請求轉發: 請求重定向: 請求轉發是伺服器行為,本質上是一次請求,所以參數可以 ...
  • 讀取HeidiSQL 配置文件中的密碼 2017 1 21 5:42:01 codegay HeidiSQL是一款開源的SQL管理工具,用管理MYSQL,MSSQL 等資料庫, 很多管理工具都會把密碼存在本地,HeidiSQL也是的,但是只是經過非常簡單的編碼,所以我經過簡單的分析後就知道瞭解密的方 ...
  • 一、Spring是什麼? 二、具體描述Spring 三、搭建Spring環境 3. Spring的配置文件:一個典型的Spring項目需要創建一個或多個Bean配置文件,這些配置文件用於在Spring IOC容器中配置Bean。Bean的配置文件可以放在classpath下,也可以放在其他目錄下。 ...
  • bean的作用域 使用bean的 scope 屬性來配置bean的作用域 scope="singleton" : 預設是單例模式 即容器初始化創建bean實例,在整個容器的生命周期內只創建這一個bean; scope="prototype" : 原型的 ,即容器初始化時不創建bean的實例,而在每次 ...
  • 對彈幕功能主要利用環信來實現的,讀者也許對環信這個東西很陌生,請先自行瞭解這環信再來看這文章。 環信開發文檔:http://docs.easemob.com/im/400webimintegration/10webimintro 請大家看文檔看WebIM這個模塊,環信官網也提供了小程式的demo,建 ...
  • FFmpeg DXVA2解碼得到的數據使用surface來承載的,surface限制很多,如果能用紋理來渲染的話,那我們就可以充分開發D3D,比如可以用坐標變換來實現電子放大的功能,還可以用坐標變換來實現視頻圖像任意角度的旋轉等功能。而對於我來說,最重要的是紋理渲染可以使得解碼後的數據能夠用像素著色... ...
  • 今天,我們來講一下建造者模式。 一、案例 我們來用winform畫一個小人,一個頭,一個身體,兩隻手,兩條腿。 我們一般想到的代碼如下: 運行的效果: 嗯,好,下麵,我們再畫一個稍微胖一點的小人。 代碼如下: 運行效果如下 咦,我們好像少花了條腿哦。 哈哈,像這樣粗心的情況我們經常出現 二、演繹 1 ...
  • 一. 許可權場景分析: 1. 系統具有角色概念, 部門概念, 且都具有相應不同的許可權 2. 用戶具有多個角色, 多個部門等關係, 並且能給單個用戶指派獨有的許可權 3. 具有細粒度許可權控制到資源的RBAC, 能控制頁面, 控制菜單, 控制邏輯, 控制單個操作, 控制到單一數據; 且具有一定的可擴展性 4 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...