Browse Source

Header,config,role 的read权权限功能

JET-GZX 3 days ago
parent
commit
660f63e45a

+ 30 - 3
VirgoUI/MainViewModel.cs

@@ -821,11 +821,9 @@ namespace VirgoUI.Client
                     //ClientApp.Instance.UserContext.Token = token;
                     ClientApp.Instance.UserContext.LastAccessTime = DateTime.Now;
                     ClientApp.Instance.UserContext.IsLogin = true;
-
                     //Load menu by role
                     //filer menu if necessary...
-                    ClientApp.Instance.MenuManager.LoadMenu(RoleAccountProvider.Instance.GetMenusByRole(role.RoleID, ClientApp.Instance.MenuLoader.MenuList));
-
+                    ClientApp.Instance.MenuManager.LoadMenu(RoleAccountProvider.Instance.GetMenusByRole(role.RoleID, ClientApp.Instance.MenuLoader.MenuList));                 
                     IsAutoLogout = role.IsAutoLogout;
                     LogoutTime = role.LogoutTime;
                     InitMenu(); //bind menu to main view
@@ -976,6 +974,28 @@ namespace VirgoUI.Client
 
         }
 
+        private Dictionary<string, int> _permissionMap;
+
+        private void ParsePermissions(string permissionString)
+        {
+            _permissionMap = permissionString
+                .Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
+                .Select(part => part.Split(','))
+                .Where(arr => arr.Length == 2)
+                .ToDictionary(
+                    arr => arr[0].Trim(),
+                    arr => int.TryParse(arr[1].Trim(), out var val) ? val : 0);
+        }
+        public bool PageEnabled
+        {
+            get
+            {
+                if (_permissionMap == null || !_permissionMap.TryGetValue("Header", out var level))
+                    return true;          
+                return level == 3;         
+            }
+        }
+
         protected override bool OnTimer()
         {
             try
@@ -984,9 +1004,16 @@ namespace VirgoUI.Client
                 List<Role> roles = RoleAccountProvider.Instance.GetRoles();
                 if (!string.IsNullOrEmpty(ClientApp.Instance.UserContext.RoleName))
                 {
+                    //var _Permission = roles.Find(AccountManager.GetSingleRolePermission(RoleName));
+                    //PageEnabled = true;
+                    //var permissions = AccountManager.GetSingleRolePermission(ClientApp.Instance.UserContext.RoleName);
+                    //var permission = ClientApp.Instance.UserContext.Role.MenuPermission;
+                    ParsePermissions(ClientApp.Instance.UserContext.Role.MenuPermission);
+
                     Role role = roles.Find(x => x.RoleName == ClientApp.Instance.UserContext.RoleName);
                     LogoutTime = role.LogoutTime;
                     IsAutoLogout = role.IsAutoLogout;
+                    //NotifyOfPropertyChange(() => PageEnabled);
                     int intervaltime = GetLastInputTime();
                     //if (System.DateTime.Now >= ClientApp.Instance.UserContext.LoginTime.AddMinutes(LogoutTime) && IsLogin && IsAutoLogout)
                     if (intervaltime >= LogoutTime * 60 && IsLogin && IsAutoLogout)

+ 1 - 1
VirgoUI/Models/PMs/PmIoView.xaml

@@ -74,7 +74,7 @@
                                 <GridViewColumn.CellTemplate>
                                     <DataTemplate>
                                         <Grid Width="35">
-                                            <ctrl:SwitchButton ON="{Binding Value}" Style="{StaticResource OperationButton}" HorizontalAlignment="Center" IsEnabled="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type UserControl}},Path= DataContext.PageEnabled}">
+                                            <ctrl:SwitchButton ON="{Binding Value}" Style="{StaticResource OperationButton}" HorizontalAlignment="Center" IsEnabled="{Binding PageEnabled}">
                                                 <i:Interaction.Triggers>
                                                     <i:EventTrigger EventName="Click">
                                                         <cal:ActionMessage MethodName="SetDO">

+ 3 - 2
VirgoUI/Models/Utility/Role/RoleView.xaml

@@ -188,10 +188,11 @@
                                         <GridViewColumn.CellTemplate>
                                             <DataTemplate >
                                                 <ComboBox Width="140" x:Name="combPermission"
-                                                DisplayMemberPath="StringPermission" IsEnabled="{Binding PageEnabled}"
+                                                DisplayMemberPath="StringPermission"
                                                 SelectedIndex="{Binding DisplayIndexPermission}"                                                                          
                                                 ItemsSource="{Binding DataContext.PermissionDictionary,
-                                                RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}">
+                                                RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
+                                                IsEnabled="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type UserControl}},Path= DataContext.PageEnabled}">
                                                     <i:Interaction.Triggers>
                                                         <i:EventTrigger EventName="SelectionChanged">
                                                             <cal:ActionMessage MethodName="OnRoleChanged">

+ 1 - 1
VirgoUI/Models/Utility/SystemConfig/SystemConfigView.xaml

@@ -236,7 +236,7 @@
                     <DataGridTemplateColumn MinWidth="80">
                         <DataGridTemplateColumn.CellTemplate>
                             <DataTemplate>
-                                <Button Content="Set" Width="60" Height="20" FontSize="12">
+                                <Button Content="Set" Width="60" Height="20" FontSize="12" IsEnabled="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type UserControl}},Path= DataContext.PageEnabled}">
                                     <i:Interaction.Triggers>
                                         <i:EventTrigger EventName="Click">
                                             <cal:ActionMessage MethodName="SetValue">