diff --git a/src/admin/Bootstrap.Admin/Pages/Views/Admin/Settings.razor b/src/admin/Bootstrap.Admin/Pages/Views/Admin/Settings.razor
index e4eea25e..5f0009ef 100644
--- a/src/admin/Bootstrap.Admin/Pages/Views/Admin/Settings.razor
+++ b/src/admin/Bootstrap.Admin/Pages/Views/Admin/Settings.razor
@@ -44,6 +44,73 @@
         </div>
     </div>
 </ConditionComponent>
+<div class="card">
+    <div class="card-header"><label class="control-label" data-toggle="lgbinfo" data-content="通过此功能进行整个网站的登录界面设置">后台管理登录地址设置</label></div>
+    <div class="card-body">
+        <div class="form-group">
+            <div class="form-group text-right">
+                <div class="btn-group" role="group">
+                    <Dropdown @bind-Value="@Model.SelectedLogin" Items="@Model.Logins"></Dropdown>
+                    <button class="btn btn-secondary" type="button">保存</button>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<div class="card">
+    <div class="card-header"><label class="control-label" data-toggle="lgbinfo" data-content="此功能给前台网站拼接后台功能菜单时使用">后台管理地址设置</label></div>
+    <div class="card-body" data-toggle="LgbValidate" data-valid-button="[data-method='appPath']">
+        <ConditionComponent>
+            <div class="alert alert-danger" role="alert">
+                <span>演示系统禁止更改后台管理地址</span>
+            </div>
+        </ConditionComponent>
+        <div class="form-group">
+            <div class="input-group">
+                <input type="text" class="form-control flex-fill" placeholder="请输入后台管理地址,2000字以内" value="@Model.AdminPathBase" maxlength="2000" data-valid="true" />
+                <ConditionComponent Inverse="true">
+                    <div class="input-group-append">
+                        <button class="btn btn-secondary" type="button" data-method="appPath">保存</button>
+                    </div>
+                </ConditionComponent>
+            </div>
+        </div>
+    </div>
+</div>
+<div class="card" asp-auth="app">
+    <div class="card-header">前台应用设置</div>
+    <div class="card-body">
+        <ConditionComponent>
+            <div class="alert alert-danger" role="alert">
+                <span>演示系统禁止更改前台应用设置</span>
+            </div>
+        </ConditionComponent>
+        <div class="form-inline">
+            <div class="row" id="appList">
+                @foreach (var app in Model.Apps)
+                {
+                    <div class="form-group col-12 app" data-key="@app.Key">
+                        <label class="control-label" for="@app.Key">@app.Name</label>
+                        <div class="input-group flex-fill">
+                            <input id="@app.Key" class="form-control" value="@app.Url" readonly />
+                            <ConditionComponent Inverse="true">
+                                <div class="input-group-append">
+                                    <button class="btn btn-danger" type="button" data-key="@app.Key" data-method="delApp"><i class="fa fa-trash-o"></i><span>删除</span></button>
+                                    <button class="btn btn-primary" type="button" data-key="@app.Key" data-method="editApp"><i class="fa fa fa-pencil"></i><span>编辑</span></button>
+                                </div>
+                            </ConditionComponent> 
+                        </div>
+                    </div>
+                }
+            </div>
+        </div>
+    </div>
+    <ConditionComponent Inverse="true">
+        <div class="card-footer text-right">
+            <button class="btn btn-secondary" type="button" data-method="addApp"><i class="fa fa-plus"></i><span>新增</span></button>
+        </div>
+    </ConditionComponent>
+</div>
 <ConditionComponent AuthKey="saveTheme">
     <div class="card">
         <div class="card-header">网站样式设置</div>
diff --git a/src/admin/Bootstrap.Admin/Pages/Views/Components/SettingsBase.cs b/src/admin/Bootstrap.Admin/Pages/Views/Components/SettingsBase.cs
index ccbac2f2..824bb040 100644
--- a/src/admin/Bootstrap.Admin/Pages/Views/Components/SettingsBase.cs
+++ b/src/admin/Bootstrap.Admin/Pages/Views/Components/SettingsBase.cs
@@ -6,6 +6,7 @@ using Bootstrap.Security.Mvc;
 using Longbow.Cache;
 using Microsoft.AspNetCore.Components;
 using Microsoft.JSInterop;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 
@@ -98,6 +99,22 @@ namespace Bootstrap.Admin.Pages.Views.Admin.Components
             Model.CookiePeriod = DictHelper.RetrieveCookieExpiresPeriod();
             Model.IPCachePeriod = DictHelper.RetrieveLocaleIPSvrCachePeriod();
             Model.EnableDemo = DictHelper.RetrieveSystemModel();
+
+            Model.Logins = DictHelper.RetrieveLogins().Select(d => new SelectedItem(){
+                Value = d.Code,
+                Text = d.Name
+            });
+            var view = DictHelper.RetrieveLoginView();
+            var viewName = Model.Logins.FirstOrDefault(d => d.Value == view)?.Text ?? "系统默认";
+            Model.SelectedLogin = new SelectedItem() {  Value = view, Text = viewName };
+            Model.AdminPathBase = DictHelper.RetrievePathBase();
+
+            var dicts = DictHelper.RetrieveDicts();
+            Model.Apps = DictHelper.RetrieveApps().Where(d => !d.Key.Equals("BA", StringComparison.OrdinalIgnoreCase)).Select(k =>
+            {
+                var url = dicts.FirstOrDefault(d => d.Category == "应用首页" && d.Name == k.Key && d.Define == 0)?.Code ?? "未设置";
+                return (k.Key, k.Value, url);
+            });
         }
 
         /// <summary>
@@ -380,6 +397,26 @@ namespace Bootstrap.Admin.Pages.Views.Admin.Components
             /// 获得 系统是否允许健康检查
             /// </summary>
             public bool EnableHealth { get; set; }
+
+            /// <summary>
+            /// 获得/设置 字典表中登录首页集合
+            /// </summary>
+            public IEnumerable<SelectedItem> Logins { get; set; } = new SelectedItem[0];
+
+            /// <summary>
+            /// 获得/设置 登录视图名称 默认是 Login
+            /// </summary>
+            public SelectedItem SelectedLogin { get; set; } = new SelectedItem();
+
+            /// <summary>
+            /// 获得/设置 后台管理网站地址
+            /// </summary>
+            public string AdminPathBase { get; set; } = "";
+
+            /// <summary>
+            /// 获得/设置 系统应用程序集合
+            /// </summary>
+            public IEnumerable<(string Key, string Name, string Url)> Apps { get; set; } = new List<(string, string, string)>();
         }
     }
 }
diff --git a/src/client/Bootstrap.Client.DataAccess/Helper/MenuHelper.cs b/src/client/Bootstrap.Client.DataAccess/Helper/MenuHelper.cs
index afcee38c..5f917db0 100644
--- a/src/client/Bootstrap.Client.DataAccess/Helper/MenuHelper.cs
+++ b/src/client/Bootstrap.Client.DataAccess/Helper/MenuHelper.cs
@@ -37,5 +37,14 @@ namespace Bootstrap.Client.DataAccess
         /// <param name="userName"></param>
         /// <returns></returns>
         public static IEnumerable<BootstrapMenu> RetrieveAllMenus(string userName) => CacheManager.GetOrAdd($"{RetrieveMenusAll}-{userName}", key => DbContextManager.Create<Menu>()?.RetrieveAllMenus(userName), RetrieveMenusAll) ?? new BootstrapMenu[0];
+
+        /// <summary>
+        /// 通过当前用户名与指定菜单路径获取此菜单下所有授权按钮集合 (userName, url, auths) => bool
+        /// </summary>
+        /// <param name="userName">当前操作用户名</param>
+        /// <param name="url">资源按钮所属菜单</param>
+        /// <param name="auths">资源授权码</param>
+        /// <returns></returns>
+        public static bool AuthorizateButtons(string userName, string url, string auths) => DbContextManager.Create<Menu>()?.AuthorizateButtons(userName, url, auths) ?? false;
     }
 }
diff --git a/src/client/Bootstrap.Client.DataAccess/Menu.cs b/src/client/Bootstrap.Client.DataAccess/Menu.cs
index 4290212a..98a9ad63 100644
--- a/src/client/Bootstrap.Client.DataAccess/Menu.cs
+++ b/src/client/Bootstrap.Client.DataAccess/Menu.cs
@@ -15,5 +15,18 @@ namespace Bootstrap.Client.DataAccess
         /// <param name="userName">当前登录的用户名</param>
         /// <returns></returns>
         public virtual IEnumerable<BootstrapMenu> RetrieveAllMenus(string userName) => DbHelper.RetrieveAllMenus(userName);
+
+        /// <summary>
+        /// 通过当前用户名与指定菜单路径获取此菜单下所有授权按钮集合 (userName, url, auths) => bool
+        /// </summary>
+        /// <param name="userName">当前操作用户名</param>
+        /// <param name="url">资源按钮所属菜单</param>
+        /// <param name="auths">资源授权码</param>
+        /// <returns></returns>
+        public virtual bool AuthorizateButtons(string userName, string url, string auths)
+        {
+            var menus = MenuHelper.RetrieveAllMenus(userName);
+            return DbHelper.AuthorizateButtons(menus, url, auths);
+        }
     }
 }
diff --git a/src/client/Bootstrap.Client/Startup.cs b/src/client/Bootstrap.Client/Startup.cs
index 097eae0d..49009d26 100644
--- a/src/client/Bootstrap.Client/Startup.cs
+++ b/src/client/Bootstrap.Client/Startup.cs
@@ -49,6 +49,7 @@ namespace Bootstrap.Client
             services.AddOnlineUsers();
             services.AddBootstrapAdminAuthentication(Configuration);
             services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireBootstrapAdminAuthorizate().Build());
+            services.AddButtonAuthorization(MenuHelper.AuthorizateButtons);
 
             services.AddControllersWithViews(options =>
             {