public SystemRole CreateSystemRole(string roleName, EnumSystemRoleType roleType, SystemRolePermissions permissions, SystemRoleAssignments assignments)
        {
            if(string.IsNullOrEmpty(roleName))
            {
                throw new ArgumentNullException("Missing role name");
            }

            permissions = permissions ?? new SystemRolePermissions();
            assignments = assignments ?? new SystemRoleAssignments();

            if(_documentSession.QueryNoCache<SystemRole>().Any(i=>i.RoleName == roleName))
            {
                throw new ArgumentException(string.Format("Role with role name {0} already exists", roleName));
            }
            string systemRoleId = Guid.NewGuid().ToString();
            var role = new SystemRole
            {
                Id = systemRoleId,
                RoleName = roleName,
                Assignments = assignments,
                Permissions = permissions,  
                RoleType = roleType
            };
            role.SetCreatedFields(_userIdentity.UserName);
            
            return _documentSession.StoreSaveEvict(role);
        }
 public SystemRole UpdateSystemRole(string systemRoleId, string roleName, EnumSystemRoleType roleType, SystemRolePermissions permissions, SystemRoleAssignments assignments)
 {
     if(string.IsNullOrEmpty(roleName))
     {
         throw new ArgumentNullException("Missing role name");
     }
     var existingItem = _documentSession.QueryNoCacheNotStale<SystemRole>().Any(i=>i.Id != systemRoleId && i.RoleName == roleName);
     if(existingItem)
     {
         throw new ArgumentException("RoleName already exists: " + roleName);
     }
     var role = _documentSession.LoadEnsure<SystemRole>(systemRoleId);
     role.RoleName = roleName;
     role.RoleType = roleType;
     role.SetUpdatedFields(_userIdentity.UserName);
     role.Permissions = permissions ?? new SystemRolePermissions();
     role.Assignments = assignments ?? new SystemRoleAssignments();
     return _documentSession.SaveEvict(role);
 }
        public SystemRole UpdateSystemRole(string systemRoleId, string roleName, EnumSystemRoleType roleType, SystemRolePermissions permissions, SystemRoleAssignments assignments)
        {
            if(string.IsNullOrEmpty(roleName))
            {
                throw new ArgumentNullException("roleName");
            }
            using(var db = _sqlConnectionInfo.GetDB())
            {
                var count = db.ExecuteScalar<int>("SELECT COUNT(*) FROM SystemRole WHERE RoleName=@0 AND ID<>@1", roleName, systemRoleId);
                if(count != 0)
                {
                    throw new ArgumentException("RoleName already exists: " + roleName);
                }
            }
            var item = this.GetDBItem(systemRoleId);
            item.RoleName = roleName;
            item.RoleType = roleType;
            item.PermissionsJson = (permissions ?? new SystemRolePermissions()).ToJson();
            item.SetUpdatedFields(_userIdentity.UserName);
            using(var db = _sqlConnectionInfo.GetDB())
            {
                db.Update("SystemRole", "ID", item, item.Id);

                if(assignments == null || assignments.UserNameList == null || assignments.UserNameList.Count == 0)
                {
                    db.Execute("DELETE FROM SystemRoleUser WHERE SystemRoleID=@0", systemRoleId);
                }
                else 
                {
                    var itemsToAdd = new List<string>();
                    var itemsToDelete = new List<SqlSystemRoleUser>();

                    foreach(var newUserName in assignments.UserNameList)
                    {
                        if(!item.SystemRoleUserList.Any(i=>i.UserName.Equals(newUserName, StringComparison.CurrentCultureIgnoreCase)))
                        {
                            itemsToAdd.Add(newUserName);
                        }
                    }
                    foreach(var oldUser in item.SystemRoleUserList)
                    {
                        if(!assignments.UserNameList.Contains(oldUser.UserName, StringComparer.CurrentCultureIgnoreCase))
                        {
                            itemsToDelete.Add(oldUser);
                        }
                    }
                    foreach(var newUserName in itemsToAdd)
                    {
                        var dbItem = new SqlSystemRoleUser
                        {
                            Id = Guid.NewGuid().ToString(),
                            SystemRoleId = systemRoleId, 
                            UserName = newUserName
                        };
                        db.Insert("SystemRoleUser", "ID", false, dbItem);
                    }
                    foreach(var oldUser in itemsToDelete)
                    {
                        db.Execute("DELETE FROM SystemRoleUser WHERE ID=@0", oldUser.Id);
                    }
                }
            }
            return this.GetSystemRole(item.Id);
        }
 public SystemRole CreateSystemRole(string roleName, EnumSystemRoleType roleType, SystemRolePermissions permissions, SystemRoleAssignments assignments)
 {
     if(string.IsNullOrEmpty(roleName))
     {
         throw new ArgumentNullException("roleName");
     }
     using (var db = _sqlConnectionInfo.GetDB())
     {
         var count = db.ExecuteScalar<int>("SELECT COUNT(*) FROM SystemRole WHERE RoleName=@0", roleName);
         if (count != 0)
         {
             throw new ArgumentException("RoleName already exists: " + roleName);
         }
     }
     var item = new SqlSystemRole
     {
         Id = Guid.NewGuid().ToString(),
         RoleName = roleName, 
         RoleType = roleType,
         PermissionsJson = (permissions ?? new SystemRolePermissions()).ToJson(),
         //AssignmentsJson = (assignments ?? new SystemRoleAssignments()).ToJson()
     };
     item.SetCreatedFields(_userIdentity.UserName);
     using(var db = _sqlConnectionInfo.GetDB())
     {
         db.Insert("SystemRole", "ID", false, item);
         
         if(assignments != null && assignments.UserNameList != null)
         {
             foreach(var userName in assignments.UserNameList)
             {
                 var userItem = new SqlSystemRoleUser
                 {
                     Id = Guid.NewGuid().ToString(),
                     SystemRoleId = item.Id,
                     UserName = userName
                 };
                 db.Insert("SystemRoleUser", "ID", false, userItem);
             }
         }
     }
     return this.GetSystemRole(item.Id);
 }
 public SystemRole UpdateSystemRole(string systemRoleId, string roleName, SystemRolePermissions permissions, SystemRoleAssignments assignments)
 {
     var role = _systemRoleRepository.GetSystemRole(systemRoleId);
     return _systemRoleRepository.UpdateSystemRole(systemRoleId, roleName, role.RoleType, permissions, assignments);
 }
 public SystemRole CreateSystemRole(string roleName, SystemRolePermissions permissions, SystemRoleAssignments assignments)
 {
     return _systemRoleRepository.CreateSystemRole(roleName, EnumSystemRoleType.Normal, permissions, assignments);
 }