using System; using System.Collections; using System.Collections.Generic; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Linq; using System.Net; using System.Web; using System.Web.Http; using System.Web.Http.Description; using DevExpress.Office.Utils; using iBemsDataService.Model; using iBemsDataService.Util; using System.Transactions; using System.Diagnostics; namespace iBemsDataService.Controllers { public class CmUserGroupController : ApiController { private iBemsEntities db = new iBemsEntities(); const int PERMISSION_SEARCH = 1; const int PERMISSION_MODIFICATION = 2; const int PERMISSION_DEPEND_BUSINESS_FIELD = 4; const int PERMISSION_ALL = 7; // 1: 조회, 2(10): 수정 , 4: 업무분야 [ResponseType( typeof ( void ) )] [ActionName( "Insert" )] public IHttpActionResult PostCmUserGroup( UserGroup userGroup ) { if ( !ModelState.IsValid ) { return BadRequest( ModelState ); } try { // 그룹을 추가하면서 메뉴들을 그룹에 맞는 권한 테이블로 모두 옮겨 놓는다. using( var transaction = new TransactionScope() ) { var newUserGroup = db.CmUserGroup.Add( new CmUserGroup { SiteId = userGroup.SiteId, Name = userGroup.Name }); db.SaveChanges(); foreach( var menu in userGroup.UserGroupPermissions ) { //menu.SiteId = newUserGroup.SiteId; //menu.UserGroupId = newUserGroup.UserGroupId; //db.CmUserGroupPermission.Add( menu ); Trace.WriteLine( string.Format( "{0}-{1}" , newUserGroup.UserGroupId , menu.MenuId ) ); db.CmUserGroupPermission.Add( new CmUserGroupPermission { SiteId = newUserGroup.SiteId , UserGroupId = newUserGroup.UserGroupId , MenuId = menu.MenuId , MenuPermission = PERMISSION_ALL } ); db.SaveChanges(); } transaction.Complete(); } } catch( Exception ) { throw; } return StatusCode( HttpStatusCode.NoContent ); } [ResponseType( typeof( void ) )] [ActionName( "UpdatePermission" )] public IHttpActionResult PostCmUserGroup( List userGroupPermissions ) { if( !ModelState.IsValid ) { return BadRequest( ModelState ); } try { using( var transaction = new TransactionScope() ) { foreach( var permission in userGroupPermissions ) { var foundQuery = db.CmUserGroupPermission.Where( x => x.SiteId == permission.SiteId && x.UserGroupId == permission.UserGroupId && x.MenuId == permission.MenuId ); if( foundQuery.Any() == false ) continue; var found = foundQuery.First(); found.MenuPermission = permission.MenuPermission; } db.SaveChanges(); transaction.Complete(); } } catch( Exception ) { throw; } return StatusCode( HttpStatusCode.NoContent ); } protected override void Dispose(bool disposing) { if (disposing) { db.Dispose(); } base.Dispose(disposing); } private bool CmUserGroupExists( int id ) { return db.CmUserGroup.Count( e => e.SiteId == id ) > 0; } public class UserGroup { public int SiteId { get; set; } public int UserGroupId { get; set; } public string Name { get; set; } public List UserGroupPermissions { get; set; } }; } }