1. 程式人生 > >ASP.NET MVC5+EF6+EasyUI 後臺管理系統-分配角色給使用者

ASP.NET MVC5+EF6+EasyUI 後臺管理系統-分配角色給使用者

系列目錄

由於之前做了將許可權賦給角色,還需要做將角色組賦給使用者,和將使用者賦給角色組,一個使用者可以擁有多個角色組,一個角色組包含多個使用者,開啟模組管理,新增一個分配的操作碼

並在

角色許可權設定授權給他

在SysUser的Index新增以下按鈕

@Html.ToolButton("btnAllot", "icon-share", "分配角色", perm, "Allot", true)

我們要彈出所有角色的選擇視窗來勾選後儲存。這個大家應該想到了,所以先設定彈出介面的檢視,我命名為GetRoleByUser
所以在SysUser新增以下3個方法

  #region 設定使用者角色
        [SupportFilter(ActionName 
= "Allot")] public ActionResult GetRoleByUser(string userId) { ViewBag.UserId = userId; ViewBag.Perm = GetPermission(); return View(); } [SupportFilter(ActionName = "Allot")] public JsonResult GetRoleListByUser(GridPager pager, string
userId) { if (string.IsNullOrWhiteSpace(userId)) return Json(0); var userList = userBLL.GetRoleByUserId(ref pager,userId); var jsonData = new { total = pager.totalRows, rows = (
from r in userList select new SysRoleModel() { Id= r.Id, Name= r.Name, Description = r.Description, Flag = r.flag=="0"?"0":"1", } ).ToArray() }; return Json(jsonData); } #endregion [SupportFilter(ActionName = "Save")] public JsonResult UpdateUserRoleByUserId(string userId, string roleIds) { string[] arr = roleIds.Split(','); if (userBLL.UpdateSysRoleSysUser(userId, arr)) { LogHandler.WriteServiceLog(GetUserId(), "Ids:" + roleIds, "成功", "分配角色", "使用者設定"); return Json(JsonHandler.CreateMessage(1, Suggestion.SetSucceed), JsonRequestBehavior.AllowGet); } else { string ErrorCol = errors.Error; LogHandler.WriteServiceLog(GetUserId(), "Ids:" + roleIds, "失敗", "分配角色", "使用者設定"); return Json(JsonHandler.CreateMessage(0, Suggestion.SetFail), JsonRequestBehavior.AllowGet); } }

GetRoleByUser為彈出檢視

GetRoleListByUser為根據選擇的使用者獲取角色並讓已經分配的角色呈現選擇狀態 (儲存過程實現)

USE [AppDB]
GO
/****** Object:  StoredProcedure [dbo].[P_Sys_GetRoleByUserId]    Script Date: 02/21/2014 11:17:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create proc [dbo].[P_Sys_GetRoleByUserId]
@UserId varchar(50)
as
begin
--讀取使用者所包含的角色
select a.*,ISNULL(b.SysUserId,0) as flag from SysRole a left join
    SysRoleSysUser b 
    on a.Id = b.SysRoleId
    and b.SysUserId = @UserId
    order by b.SysUserId desc
end 
P_Sys_GetRoleByUserId

UpdateUserRoleByUserId更新選擇的後的情況(儲存過程實現)

Create PROCEDURE [dbo].[P_Sys_UpdateSysRoleSysUser]
@roleId varchar(50),@userId varchar(50)
AS
--更新角色使用者中間關係表
BEGIN
    insert into SysRoleSysUser(SysRoleId,SysUserId)
        values(@roleId,@userId)
END
P_Sys_UpdateSysRoleSysUser

儲存過程語句簡短,如果做成linq也好的,但這並不多變,所以我寫成了儲存過程。
可以參考邏輯做成程式。

SysBLL新增以下方法

 public IQueryable<P_Sys_GetRoleByUserId_Result> GetRoleByUserId(ref GridPager pager, string userId)
        {
            IQueryable<P_Sys_GetRoleByUserId_Result> queryData = sysUserRepository.GetRoleByUserId(db, userId);
            pager.totalRows = queryData.Count();
            queryData = sysUserRepository.GetRoleByUserId(db, userId);
            return queryData.Skip((pager.page - 1) * pager.rows).Take(pager.rows);
        }
        public bool UpdateSysRoleSysUser(string userId, string[] roleIds)
        {
            try
            {
                sysUserRepository.UpdateSysRoleSysUser(userId, roleIds);
                return true;

            }
            catch (Exception ex)
            {
                ExceptionHander.WriteException(ex);
                return false;
            }
            
        }

SysRepository新增以下對應方法

        public IQueryable<P_Sys_GetRoleByUserId_Result> GetRoleByUserId(DBContainer db, string userId)
        {
            return db.P_Sys_GetRoleByUserId(userId).AsQueryable();
        }

        public void UpdateSysRoleSysUser(string userId, string[] roleIds)
        {
            using (DBContainer db = new DBContainer())
            {
                db.P_Sys_DeleteSysRoleSysUserByUserId(userId);
                foreach (string roleid in roleIds)
                {
                    if (!string.IsNullOrWhiteSpace(roleid))
                    {
                        db.P_Sys_UpdateSysRoleSysUser(roleid,userId);
                    }
                }
                db.SaveChanges();
            }
        }

DAL層還用到了一個儲存過程為更新角色使用者中間關係表,前刪除關聯

Create PROCEDURE [dbo].[P_Sys_DeleteSysRoleSysUserByUserId]
@userId varchar(50)
AS
--更新角色使用者中間關係表,前刪除關聯
BEGIN
    delete SysRoleSysUser where SysUserId=

讓後自行新增介面方法即可

接下來填寫GetRoleByUser檢視程式碼

@using App.Admin;
@using App.Common;
@using App.Models.Sys;

@{
    ViewBag.Title = "設定使用者包含的角色";
    Layout = "~/Views/Shared/_Index_LayoutEdit.cshtml";

List<permModel> perm = (List<permModel>)ViewBag.Perm;
if (perm == null)
{
    perm = new List<permModel>();
}
}

<div class="mvctool bgb">
@Html.ToolButton("btnSave", "icon-save", "儲存", perm, "Create", true)
</div>
<div class="pd3">
<table id="UserList"></table>
</div>
@*Jqgrid*@
<script type="text/javascript">
    $(function () {

        $('#UserList').datagrid({
            url: '/SysUser/[email protected](ViewBag.UserId)',
            width: SetGridWidthSub(6),
            methord: 'post',
            height: SetGridHeightSub(41),
            fitColumns: true,
            sortName: 'Id',
            sortOrder: 'desc',
            idField: 'Id',
            pageSize: 12,
            pageList: [12, 20, 30, 40, 50],
            pagination: true,
            striped: true, //奇偶行是否區分
            singleSelect: true,//單選模式
            columns: [[
                { field: 'Id', title: 'ID', width: 80, hidden: true },
                { field: 'Name', title: '角色名稱', width: 120 },
                { field: 'Description', title: '說明', width: 80},
                { field: 'Flag', title: '是否分配', width: 80, editor: { type: 'checkbox', options: { on: '1', off: '0' } }}
            ]],
            onLoadSuccess: function () {
                var rows = $("#UserList").datagrid("getRows");
                for (var i = 0; i < rows.length; i++) {
                    //獲取每一行的資料
                    $('#UserList').datagrid('beginEdit', i);
                }
            }
        });
    });
</script>

@*operation*@
<script type="text/javascript">
    $(function () {
        $("#btnSave").click(function () {

            var rows = $("#UserList").datagrid("getRows"); //這段程式碼是獲取當前頁的所有行。
            var data = new Array();
            for (var i = 0; i < rows.length; i++) {
                var setFlag = $("td[field='Flag'] input").eq(i).prop("checked");
                if (setFlag)//判斷是否有作修改
                {
                    data.push(rows[i].Id);
                }
            }
            var roleIds = data.join();
            //提交資料庫
            $.post("/SysUser/UpdateUserRoleByUserId", { userId: '@(ViewBag.UserId)', roleIds: roleIds },
             function (data) {
                 if (data.type == 1) {
                     window.parent.frameReturnByMes(data.message);
                     window.parent.frameReturnByReload(true);
                     window.parent.frameReturnByClose()
                 }
                 else {
                     window.parent.frameReturnByMes(data.message);
                 }
             }, "json");
        });

    });
</script>
View Code

在index新增分配的js程式碼

$("#btnAllot").click(function () {
           var row = $('#List').datagrid('getSelected');
           if (row != null) {
               
               $("#modalwindow").html("<iframe width='100%'  height='100%' scrolling='auto' frameborder='0' src='/SysUser/GetRoleByUser?userId=" + row.Id + "&Iedate=" + GetGuid() + "'></iframe>");
               $("#modalwindow").window({ title: '分配角色', width: 720, height: 400, iconCls: 'icon-edit' }).window('open');
           } else { $.messageBox5s('提示', '@Suggestion.PlaseChooseToOperatingRecords'); }
        });


這時可以顯示一下介面了

新增多幾個角色測試一下。

給大家說一下,大家不要再問我開源不了,不會再發布原始碼包,現原始碼釋出到14講(14講包含了素材js等通用元素),資料庫是17講,在群裡提供下載,之後的文章都是有貼程式碼的,而且易懂,可以組成我釋出的系統完整版

相關推薦

ASP.NET MVC5+EF6+EasyUI 後臺管理系統-分配角色使用者

系列目錄 由於之前做了將許可權賦給角色,還需要做將角色組賦給使用者,和將使用者賦給角色組,一個使用者可以擁有多個角色組,一個角色組包含多個使用者,開啟模組管理,新增一個分配的操作碼 並在 角色許可權設定授權給他 在SysUser的Index新增以下按鈕 @Html.To

ASP.NET MVC5+EF6+EasyUI 後臺管理系統(1)-前言與目錄(持續更新中...)

編碼規範 圖標 pri log 任務 ros 部署 基本 form 開發工具:VS2015(2012以上)+SQL2008R2以上數據庫    您可以有償獲取一份最新源碼聯系QQ:729994997 價格 666RMB 升級後界面效果如下: 日程管理 http://

ASP.NET MVC5+EF6+EasyUI 後臺管理系統(65)-MVC WebApi 用戶驗證 (1)

screen 屬性 access override jquery true mod 解析 action 系列目錄 前言: WebAPI主要開放數據給手機APP,其他需要得知數據的系統,或者軟件應用,所以移動端與系統的數據源往往是相通的。 Web 用戶的身份驗證,及

ASP.NET MVC5+EF6+EasyUI 後臺管理系統(4)-創建項目解決方案

構建 文章 數據庫 操作 webapi http 業務 pps 技術分享 系列目錄 前言 為了符合後面更新後的重構系統,文章於2016-11-1日重寫 設計中術語,概念這種東西過於模糊,我們必須學習累積才能認識這些概念模型。 我無法用文章來下詳細解析此系統的深層概念,需要

ASP.NET MVC5+EF6+EasyUI 後臺管理系統(87)-MVC Excel導入和導出

.net本文示例代碼下載: 鏈接:http://pan.baidu.com/s/1jHBdgCA 密碼:hzh7ps:Vs數據庫腳本在解壓目錄下,修改web.config數據庫鏈接,示例代碼包含:導入,導出,上傳前言:導入導出實在多例子,很多成熟的組建都分裝了導入和導出,這一節演示利用LinqToExcel組

ASP.NET MVC5+EF6+EasyUI 後臺管理系統(62)-EF鏈接串加密

image title orm mst .... 比較 string類 sin isn 前言:   這一節提供一個簡單的功能,這個功能看似簡單,找了一下沒找到EF鏈接數據庫串的加密幫助文檔,只能自己寫了,這樣也更加符合自己的加密要求 有時候我們發布程序為了避免程序外的

ASP.NET MVC5+EF6+EasyUI 後臺管理系統-WebApi的用法與除錯

以往我們講了WebApi的基礎驗證,但是有新手經常來問我使用的方式 這次我們來分析一下程式碼的用法,以及除錯的方式 WebApi在一些場景我們會用到,比如: 1.對接各種客戶端(移動裝置) 2.構建常見的http微服務  3.開放資料  4.單點登陸  等...

ASP.NET MVC5+EF6+EasyUI 後臺管理系統(88)-Excel匯入和匯出-主從表結構匯出

前言 前面一篇詳細講解了匯入匯出,本節演示混合結構的匯出功能!同時提供程式碼下載.. 先看效果圖:這個一個混合的Excel,列表與自定義資訊的混合!   我們的步驟大概分為以下幾步 1.模擬資料庫資料 2.建立工作簿 3.填充固定資料 4.合併單元格 5.處理動態資料  

ASP.NET MVC5+EF6+EasyUI 後臺管理系統(17)-LinQ動態排序

系列目錄 首先修復程式中的一個BUG這個BUG在GridPager類中,把sord修改為sort這個名稱填寫錯誤,會導致後臺一直無法獲取datagrid的排序欄位 本來是沒有這一講的,為了使20行的程式碼精簡成2行,我查閱了一些資料,借鑑了一些大神的建議,首先感謝第八講中,1

ASP.NET MVC5+EF6+EasyUI 後臺管理系統(20)-許可權管理系統-根據許可權獲取選單

系列目錄 不知不覺到20講,真是漫長的日子,可惜最近工作挺忙,要不可以有更多的時間來更新,多謝大家的一路支援.如果你覺得好,記得幫我點選推薦^-^ 我們在之前已經插入一些真實資料,其中包含了一個使用者和樣例程式SysSample的許可權,並實現了使用者的登入。 但有的朋友對錶

ASP.NET MVC5+EF6+EasyUI 後臺管理系統(90)-EF 批量操作

這次我們來看 EntityFramework-Plus(免費開源) 庫的用法相比其他擴充套件庫,這個更加新並且用法更加簡單這是一個對Entity Framework進行擴充套件的類庫.支援EF EF5, EF6, EF Core,來彌補EF目前的短板GitHub地址 http

ASP.NET MVC5+EF6+EasyUI 後臺管理系統(5)-EF增刪改查

using System; using System.Collections.Generic; using System.Linq; using Apps.Models; using Apps.Common; using Apps.IBLL; using Apps.IDAL; using Apps.DAL;

ASP.NET MVC5+EF6+EasyUI 後臺管理系統 (原始碼購買說明)

系列目錄 方便朋友獲取一個開發框架,無論是開發還是學習用途將受益匪淺,出售此框架原始碼價格666,終身免費升級,線上解答問題 您可以通過QQ 729994997 聯絡我 2017-11-10 更新:

ASP.NET MVC5+EF6+EasyUI 後臺管理系統(33)-MVC 表單驗證

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel.DataAnnotations; using System.Web.Mvc; u

ASP.NET MVC5+EF6+EasyUI 後臺管理系統(89)-國際化,本地化,多語言應用

開篇 早年寫過一篇多語言的應用 :   本地化(多語言)   講述瞭如何建立多語言的資原始檔,並利用資原始檔來獲得頁面和請求的語言屬性 本次補充這篇文章,的原因是在實際專案中,有多種需要多語言的情況 比如:日誌要根據當前語言顯示 而有些情景比較複雜,我們可能的key是

構建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x註入的後臺管理系統(66)-MVC WebApi 用戶驗證 (2)

簡單 權限管理 mark 調用接口 cat pps 總結 回顧 bsp 前言: 構建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x註入的後臺管理系統(65)-MVC WebApi 用戶驗證 (1) 回顧上一節,我們利用w

ASP.netEasyUI後臺管理系統

後臺系統登入介面 後臺功能操作介面 本人承接類似中小型後臺管理系統的開發,或者類似的畢業設計,有需要的加QQ:3059233967,價格面議。 前臺技術:JQuery EasyUI,ASP.Net 資料庫:SQLServer2008

win10+vs2017+asp.net MVC5+EF6+mysql 閃退問題,解決方法

mvc connect mysql data -c 選中 nec 中項 安裝 1.安裝 mysql-for-visualstudio-2.0.5.msi 2.安裝 mysql-connector-net-6.10.7.msi 3.在VS2017 右鍵選中項目,管理NuG

【親測】Asp.net Mvc5 + EF6 code first 方式連接MySQL總結

save created eof 節點配置 posit 創建 img from 建立連接時 本文原文地址為:https://www.cnblogs.com/summit7ca/p/5423637.html 原文測試環境為windows 8.1+Vs2013+MySql5.7

基於ASP.NET的高校輔導員工作管理系統的設計與實現--論文隨筆(四)

一、基本資訊 標題:基於ASP.NET的高校輔導員工作管理系統的設計與實現 時間:2017 出版源:南通理工學院 關鍵詞:ASP.NET; SQL Server; 高校; 管理系統; 輔導員; 二、研究背景 問題定義:高校學生數量越來越多,學生資訊也越來越龐大,在輔導員的日常工作中,所使用的傳統的電子表