예제 #1
0
        public bool Check(string permissionId)
        {
            string areaName       = this.ControllerContext.RouteData.GetAreaName();
            string controllerName = this.GetType().Name.Replace("Controller", "");

            return(PermissionMgr.HasCommand(areaName, controllerName, permissionId));
        }
예제 #2
0
        /// <summary>
        /// 把孩子块生成控件并加入到 Regions 中。
        /// </summary>
        /// <param name="children"></param>
        /// <param name="mainView"></param>
        /// <param name="regions"></param>
        private void ChildrenToRegions(IList <AggtBlocks> children, LogicalView mainView, RegionContainer regions)
        {
            foreach (var child in children)
            {
                var childBlock = child.MainBlock as ChildBlock;

                if (this.NeedPermission && !PermissionMgr.CanShowBlock(this.PermissionModule, childBlock))
                {
                    continue;
                }

                //生成 childView
                LogicalView childView = this._viewFactory.CreateView(childBlock);
                childView.ChildBlock = childBlock;

                //子视图默认不显示,当选中某个父对象时,再重新计算其可见性。
                childView.IsVisible = false;

                childView.Parent = mainView;

                //ChildView Commands Container
                this.CreateCommandsUI(childView, childBlock);

                //Child Control
                var childControl = this.GenerateCompoundControl(child, childView);

                //Region
                regions.AddChildren(childBlock.Label, childControl);

                this.OnChildUICreated(childControl);
            }
        }
예제 #3
0
        private void CreateCommandsUI(LogicalView view, Block block)
        {
            if (view == null)
            {
                throw new ArgumentNullException("view");
            }
            if (block == null)
            {
                throw new ArgumentNullException("uiInfo");
            }

            var commands = block.ViewMeta.AsWPFView().Commands.Where(c => c.IsVisible).ToList();

            if (commands.Count > 0)
            {
                if (this.NeedPermission)
                {
                    commands = commands.Where(c => PermissionMgr.HasCommand(this.PermissionModule, block, c.Name)).ToList();
                }

                //Toolbar
                view.CommandsContainer = this.CreateCommandsContainer();
                this._viewFactory.BlockUIFactory.AppendCommands(
                    view.CommandsContainer, view, commands
                    );
            }
        }
예제 #4
0
        // GET: Queries/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(BadRequest());
            }

            Query query = db.Queries
                          .Include(q => q.CreatedBy)
                          .Include(q => q.LastEditedBy)
                          .First(q => q.QueryID == id);

            var database = db.DatabaseConnections.FirstOrDefault(dc => dc.DatabaseConnectionID == query.DatabaseConnectionID);

            if (database == null)
            {
                return(NotFound());
            }

            var userPermissions = db.UserDatabaseConnections
                                  .Where(uc => uc.ApplicationUserID == CurrentUser.Id)
                                  .ToList();

            if (PermissionMgr.UserCanViewQuery(userPermissions, database) == false && database.OrganisationId != CurrentUser.OrganisationId)
            {
                return(NotFound());
            }

            ViewBag.UserCanModifyQueries = PermissionMgr.UserCanModifyQuery(userPermissions, database) || database.OrganisationId == CurrentUser.OrganisationId;

            return(View(query));
        }
예제 #5
0
        // GET: DatabaseConnections/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(BadRequest());
            }

            var database = db.DatabaseConnections.FirstOrDefault(dc => dc.DatabaseConnectionID == id.Value);

            if (database == null)
            {
                return(NotFound());
            }

            var userPermissions = db.UserDatabaseConnections
                                  .Where(uc => uc.ApplicationUserID == CurrentUser.Id)
                                  .ToList();

            if (PermissionMgr.UserCanModifyDatabase(userPermissions, database) == false && database.OrganisationId != CurrentUser.OrganisationId)
            {
                return(NotFound());
            }

            ViewBag.hasExistingKeyFile = database.UseSshKey;

            var viewModel = new DatabaseConnectionViewModel(database);

            if (viewModel.SshPort == null)
            {
                viewModel.SshPort = 22;
            }

            return(View(viewModel));
        }
예제 #6
0
        public ActionResult DeleteConfirmed(int id)
        {
            Query query = db.Queries.Find(id);

            if (query == null)
            {
                return(NotFound());
            }

            var database = db.DatabaseConnections.FirstOrDefault(dc => dc.DatabaseConnectionID == query.DatabaseConnectionID);

            if (database == null)
            {
                return(NotFound());
            }

            var userPermissions = db.UserDatabaseConnections
                                  .Where(uc => uc.ApplicationUserID == CurrentUser.Id)
                                  .ToList();

            if (PermissionMgr.UserCanModifyQuery(userPermissions, database) == false && database.OrganisationId != CurrentUser.OrganisationId)
            {
                return(NotFound());
            }

            db.Queries.Remove(query);
            db.SaveChanges();

            return(RedirectToAction("Details", "Home", new { id = database.DatabaseConnectionID }));
        }
예제 #7
0
        public ActionResult Convert(int id)
        {
            Query dbQuery = db.Queries.Find(id);

            if (dbQuery == null || dbQuery.IsSimpleQuery == false)
            {
                return(NotFound());
            }

            var database = db.DatabaseConnections.FirstOrDefault(dc => dc.DatabaseConnectionID == dbQuery.DatabaseConnectionID);

            var userPermissions = db.UserDatabaseConnections
                                  .Where(uc => uc.ApplicationUserID == CurrentUser.Id)
                                  .ToList();

            if (database == null)
            {
                return(NotFound());
            }

            if (PermissionMgr.UserCanModifyQuery(userPermissions, database) == false && database.OrganisationId != CurrentUser.OrganisationId)
            {
                return(NotFound());
            }

            dbQuery.IsSimpleQuery = false;

            db.SaveChanges();

            return(RedirectToAction("Edit", "Queries", new { id = id }));
        }
예제 #8
0
        // GET: Simple/Edit/5
        public ActionResult Edit(int id)
        {
            Query query = db.Queries.Find(id);

            if (query == null || query.IsSimpleQuery == false)
            {
                return(NotFound());
            }

            var database = db.DatabaseConnections.FirstOrDefault(dc => dc.DatabaseConnectionID == query.DatabaseConnectionID);

            if (database == null)
            {
                return(NotFound());
            }

            var userPermissions = db.UserDatabaseConnections
                                  .Where(uc => uc.ApplicationUserID == CurrentUser.Id)
                                  .ToList();

            if (PermissionMgr.UserCanModifyQuery(userPermissions, database) == false && database.OrganisationId != CurrentUser.OrganisationId)
            {
                return(NotFound());
            }

            ViewBag.DatabaseConnectionID = database.DatabaseConnectionID;
            ViewBag.DatabaseName         = database.Name;

            return(View(query));
        }
예제 #9
0
        public ActionResult DeleteConfirmed(int id)
        {
            DatabaseConnection database = db.DatabaseConnections.Find(id);

            if (database == null)
            {
                return(NotFound());
            }

            var userPermissions = db.UserDatabaseConnections
                                  .Where(uc => uc.ApplicationUserID == CurrentUser.Id)
                                  .ToList();

            if (PermissionMgr.UserCanDeleteDatabase(userPermissions, database) == false && database.OrganisationId != CurrentUser.OrganisationId)
            {
                return(NotFound());
            }

            DeleteSecureInformation(database);

            db.DatabaseConnections.Remove(database);

            db.UserDatabaseConnections.RemoveWhere(uc => uc.DatabaseConnectionID == id);

            db.SaveChanges();

            return(RedirectToAction("Index"));
        }
예제 #10
0
        // GET: DatabaseConnections/Delete/5
        public ActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(BadRequest());
            }

            DatabaseConnection database = db.DatabaseConnections.Find(id);

            if (database == null)
            {
                return(NotFound());
            }

            var userPermissions = db.UserDatabaseConnections
                                  .Where(uc => uc.ApplicationUserID == CurrentUser.Id)
                                  .ToList();

            if (PermissionMgr.UserCanDeleteDatabase(userPermissions, database) == false && database.OrganisationId != CurrentUser.OrganisationId)
            {
                return(NotFound());
            }

            return(View(database));
        }
예제 #11
0
        // GET: Queries/Delete/5
        public ActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(BadRequest());
            }

            Query query = db.Queries.Find(id.Value);

            if (query == null)
            {
                return(NotFound());
            }

            var database = db.DatabaseConnections.FirstOrDefault(dc => dc.DatabaseConnectionID == query.DatabaseConnectionID);

            if (database == null)
            {
                return(NotFound());
            }

            var userPermissions = db.UserDatabaseConnections
                                  .Where(uc => uc.ApplicationUserID == CurrentUser.Id)
                                  .ToList();

            if (PermissionMgr.UserCanModifyQuery(userPermissions, database) == false && database.OrganisationId != CurrentUser.OrganisationId)
            {
                return(NotFound());
            }

            return(View(query));
        }
예제 #12
0
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            //UIShell.RbacManagementPlugin/Users/List
            //{pluginName}/{controller}/{action}

            string pluginName = filterContext.RouteData.GetAreaName();
            string controller = filterContext.RouteData.GetRequiredString("controller");
            string action     = filterContext.RouteData.GetRequiredString("action");

            if (string.IsNullOrWhiteSpace(Name))
            {
                Name = action;
            }

            bool hasPermission = false;

            hasPermission = PermissionMgr.HasCommand(pluginName, controller, Name);

            if (hasPermission)
            {
                base.OnActionExecuting(filterContext);
            }
            else
            {
                filterContext.Result = new ViewResult {
                    ViewName = NoPermissionView
                };
            }
        }
예제 #13
0
        private bool CanUserAccessDatabase(DatabaseConnection connection)
        {
            var userPermissions = db.UserDatabaseConnections
                                  .Where(uc => uc.ApplicationUserID == CurrentUser.Id)
                                  .ToList();

            if (PermissionMgr.UserCanViewDatabase(userPermissions, connection) == false && connection.OrganisationId != CurrentUser.OrganisationId)
            {
                return(false);
            }

            return(true);
        }
예제 #14
0
        /// <summary>
        /// 打开某个模块。
        ///
        /// 如果没有权限打开该模块,则弹出提示框。
        /// </summary>
        /// <param name="module"></param>
        /// <returns></returns>
        public WorkspaceWindow OpenModuleOrAlert(WPFModuleMeta module)
        {
            if (!PermissionMgr.CanShowModule(module))
            {
                App.MessageBox.Show(string.Format(
                                        "对不起,此功能需要 [ {0} ] 模块权限,您不具备此权限,如有需要,请与系统管理员联系!".Translate(),
                                        module.Label.Translate()
                                        ));

                return(null);
            }

            return(this.OpenModule(module));
        }
예제 #15
0
        public override void Execute(QueryLogicalView view)
        {
            var moduleMeta = CommonModel.Modules[typeof(ProductCategory)] as WPFModuleMeta;

            if (PermissionMgr.CanShowModule(moduleMeta))
            {
                var page = App.Current.CreateModule(moduleMeta);
                var btn  = App.Windows.ShowDialog(page.WindowControl, w =>
                {
                    w.Title = "维护分类".Translate();
                });
                if (btn == WindowButton.Yes)
                {
                    view.Commands[typeof(RefreshProductNavigation)].TryExecute();
                }
            }
        }
예제 #16
0
        public ActionResult Edit(Query query)
        {
            Query dbQuery = db.Queries.Find(query.QueryID);

            if (dbQuery == null || dbQuery.IsSimpleQuery == false)
            {
                return(NotFound());
            }

            var database = db.DatabaseConnections.FirstOrDefault(dc => dc.DatabaseConnectionID == dbQuery.DatabaseConnectionID);

            var userPermissions = db.UserDatabaseConnections
                                  .Where(uc => uc.ApplicationUserID == CurrentUser.Id)
                                  .ToList();

            if (database == null)
            {
                return(NotFound());
            }

            if (PermissionMgr.UserCanModifyQuery(userPermissions, database) == false && database.OrganisationId != CurrentUser.OrganisationId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                dbQuery.Name            = query.Name;
                dbQuery.LastEditedBy    = CurrentUser;
                dbQuery.LastEditedOn    = DateTime.Now;
                dbQuery.QueryDefinition = query.QueryDefinition;
                dbQuery.Description     = query.Description;

                db.Queries.Update(dbQuery);

                db.SaveChanges();

                return(RedirectToAction("Details", "Queries", new { id = query.QueryID }));
            }

            ViewBag.DatabaseConnectionID = database.DatabaseConnectionID;
            ViewBag.DatabaseName         = database.Name;

            return(View(query));
        }
예제 #17
0
        public ActionResult Create(Query query)
        {
            var database = db.DatabaseConnections.FirstOrDefault(dc => dc.DatabaseConnectionID == query.DatabaseConnectionID);

            if (database == null)
            {
                return(NotFound());
            }

            var userPermissions = db.UserDatabaseConnections
                                  .Where(uc => uc.ApplicationUserID == CurrentUser.Id)
                                  .ToList();

            if (PermissionMgr.UserCanModifyQuery(userPermissions, database) == false && database.OrganisationId != CurrentUser.OrganisationId)
            {
                return(NotFound());
            }


            //TODO: MUST CHANGE
            //if (ModelState.IsValid)
            // {
            query.CreatedBy     = CurrentUser;
            query.LastEditedBy  = CurrentUser;
            query.CreatedOn     = DateTime.Now;
            query.LastEditedOn  = DateTime.Now;
            query.IsSimpleQuery = true;
            db.Queries.Add(query);

            db.SaveChanges();

            return(RedirectToAction("Details", "Queries", new { id = query.QueryID }));

            //}

            ViewBag.DatabaseConnectionID = database.DatabaseConnectionID;
            ViewBag.DatabaseName         = database.Name;

            return(View(query));
        }
예제 #18
0
        // GET: Queries/Create
        public ActionResult Create(int connectionId = 0)
        {
            var database = db.DatabaseConnections.FirstOrDefault(dc => dc.DatabaseConnectionID == connectionId);

            if (database == null)
            {
                return(NotFound());
            }

            var userPermissions = db.UserDatabaseConnections
                                  .Where(uc => uc.ApplicationUserID == CurrentUser.Id)
                                  .ToList();

            if (PermissionMgr.UserCanModifyQuery(userPermissions, database) == false && database.OrganisationId != CurrentUser.OrganisationId)
            {
                return(NotFound());
            }

            ViewBag.DatabaseConnectionID = connectionId;
            ViewBag.DatabaseName         = database.Name;
            return(View());
        }
예제 #19
0
        // GET: Queries/Create
        public ActionResult Create(int connectionId)
        {
            var database = db.DatabaseConnections.FirstOrDefault(dc => dc.DatabaseConnectionID == connectionId);

            if (database == null)
            {
                return(NotFound());
            }

            var userPermissions = db.UserDatabaseConnections
                                  .Where(uc => uc.ApplicationUserID == CurrentUser.Id)
                                  .ToList();

            if (PermissionMgr.UserCanModifyQuery(userPermissions, database) == false && database.OrganisationId != CurrentUser.OrganisationId)
            {
                return(NotFound());
            }

            ViewBag.DatabaseConnectionID = connectionId;
            ViewBag.DatabaseName         = database.Name;

            int   i         = 1;
            Query viewModel = new Query
            {
                DatabaseConnectionID = connectionId,
                Name = "Report " + i++
            };

            var existingQueries = db.Queries.Where(q => q.DatabaseConnectionID == connectionId).ToList();

            while (existingQueries.Any(q => string.Compare(q.Name, viewModel.Name, true) == 0))
            {
                viewModel.Name = "Report " + i++;
            }

            return(View(viewModel));
        }
예제 #20
0
        // GET: DatabaseConnections/Details/5
        public ActionResult Details(int id)
        {
            var database = db.DatabaseConnections.FirstOrDefault(dc => dc.DatabaseConnectionID == id);

            if (database == null)
            {
                return(NotFound());
            }

            var userPermissions = db.UserDatabaseConnections
                                  .Where(uc => uc.ApplicationUserID == CurrentUser.Id)
                                  .ToList();

            if (PermissionMgr.UserCanViewDatabase(userPermissions, database) == false && database.OrganisationId != CurrentUser.OrganisationId)
            {
                return(NotFound());
            }

            ViewBag.UserIsOrganisationAdmin     = database.OrganisationId == CurrentUser.OrganisationId;
            ViewBag.UserCanModifyQueries        = PermissionMgr.UserCanModifyQuery(userPermissions, database) || database.OrganisationId == CurrentUser.OrganisationId;
            ViewBag.UserCanModifyDatabase       = PermissionMgr.UserCanModifyDatabase(userPermissions, database) || database.OrganisationId == CurrentUser.OrganisationId;
            ViewBag.UserCanManageDatabaseAccess = PermissionMgr.UserCanManageDatabaseAccess(userPermissions, database) || database.OrganisationId == CurrentUser.OrganisationId;
            ViewBag.UserCanDeleteDatabase       = PermissionMgr.UserCanDeleteDatabase(userPermissions, database) || database.OrganisationId == CurrentUser.OrganisationId;

            var viewModel = new DatabaseConnectionDetailsViewModel
            {
                DatabaseConnectionID = database.DatabaseConnectionID,
                Name         = database.Name,
                Type         = database.Type,
                Server       = database.Server,
                Port         = database.Port,
                Username     = database.Username,
                DatabaseName = database.DatabaseName,
                Description  = database.Description,
                UseSsh       = database.UseSsh,
                SshServer    = database.SshServer,
                SshPort      = database.SshPort,
                SshUsername  = database.SshUsername,
                AccessUsers  = new List <UserDatabaseConnection>()
            };
            List <DatabaseConnectionQueriesDetailsViewModel> viewQueries = new List <DatabaseConnectionQueriesDetailsViewModel>();

            var queries = db.Queries
                          .Include(q => q.CreatedBy)
                          .Include(q => q.LastEditedBy)
                          .Where(q => q.DatabaseConnectionID == database.DatabaseConnectionID);

            foreach (var query in queries)
            {
                DatabaseConnectionQueriesDetailsViewModel queryView = new DatabaseConnectionQueriesDetailsViewModel();
                queryView.QueryID       = query.QueryID;
                queryView.Name          = query.Name;
                queryView.Description   = query.Description;
                queryView.IsSimpleQuery = query.IsSimpleQuery;
                queryView.CreatedBy     = query.CreatedBy;
                queryView.CreatedOn     = query.CreatedOn;
                queryView.LastEditedBy  = query.LastEditedBy;
                queryView.LastEditedOn  = query.LastEditedOn;
                viewQueries.Add(queryView);
            }

            viewModel.SavedQueries = viewQueries.OrderByDescending(q => q.LastEditedOn);

            if (database.Organisation != null)
            {
                viewModel.OrganisationName = database.Organisation.OrganisationName;
            }
            else
            {
                viewModel.OrganisationName = "None";
            }

            if (ViewBag.UserCanModifyDatabase)
            {
                // Don't allow users to manage themselves, things get strange very quickly
                var accessUsers = db.UserDatabaseConnections
                                  .Where(u => u.DatabaseConnection.DatabaseConnectionID == database.DatabaseConnectionID && u.ApplicationUserID != CurrentUser.Id)
                                  .ToList();

                foreach (var accessUser in accessUsers)
                {
                    viewModel.AccessUsers.Add(new UserDatabaseConnection
                    {
                        UserDatabaseConnectionID = accessUser.UserDatabaseConnectionID,
                        DatabaseConnectionID     = accessUser.DatabaseConnectionID,
                        ApplicationUser          = accessUser.ApplicationUser,
                        Type        = accessUser.Type,
                        CreatedBy   = accessUser.CreatedBy,
                        CreatedOn   = accessUser.CreatedOn,
                        InviteEmail = accessUser.InviteEmail,
                    });
                }
            }

            return(View(viewModel));
        }