如何根据登录状态/角色限制/控制用户可以访问的导航路线?

     2023-03-25     216

关键词:

【中文标题】如何根据登录状态/角色限制/控制用户可以访问的导航路线?【英文标题】:How can you restrict/control the navigation routes the user can visit based on login status/role? 【发布时间】:2021-03-19 00:39:04 【问题描述】:

对于我的 Xamarin.Forms 应用,我正在寻找一种方法来检查用户是否具有正确的角色/身份验证状态来访问页面。我知道 Angular 有路由守卫,可以重复用于不同的路由来检查身份验证状态。 Xamarin.Forms 中有类似的东西吗?

【问题讨论】:

您可以定义一个属性 IsLogged 并绑定页面属性 IsVisible,该属性要求用户登录到该属性。 Shell 将隐藏任何具有 IsVisible="false" 的页面 @Cfun 太棒了!是否也可以显示页面,但基于此登录属性重定向?例如,我有一个帐户页面,您可以在其中查看您的个人资料。但前提是您已登录。因为我仍想显示图标,但有条件地重定向到登录/帐户页面。 【参考方案1】:

这是一个示例,展示了如何根据用户的登录状态控制页面的可见性或导航。

默认情况下,Shell 将始终首先显示在AppShell.xaml 中定义的第一个元素,在这种情况下它将是Login.xaml 页面。

在下面的示例中,“Page3”最初是可见的,因为默认情况下 (Isvisible=true),而“Page2”仅在可绑定属性 IsLoggedtrue 时才可见。

您可以在IsLogged_PropertyChanged() 事件中处理用户登录/注销时的任何逻辑。

如果您想要多个/特定或基于页面的角色,您可以随时创建/定义/设计您的角色,在绑定中使用它们,引发并使用它们的属性更改事件来执行操作。


使用 FlyoutItem

AppShell.xaml

<Shell Shell.FlyoutBehavior="Disabled"..>
   <FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
        <Tab>
            <ShellContent Title="Login" Route="Login">
                <local:Login />
            </ShellContent>

            <ShellContent Title="Page2" Route="Page2"
                ContentTemplate="DataTemplate local:Page2"
                IsVisible="Binding IsLogged"/>

            <ShellContent Title="Page3" Route="Page3"
                ContentTemplate="DataTemplate local:Page3"/>
        </Tab>
    </FlyoutItem>

AppShell.xaml.cs

public bool IsLogged

    get => (bool)GetValue(IsLoggedProperty);
    set => SetValue(IsLoggedProperty, value);


public static readonly BindableProperty IsLoggedProperty =
    BindableProperty.Create("IsLogged", typeof(bool), typeof(AppShell), false, propertyChanged: IsLogged_PropertyChanged);

private static void IsLogged_PropertyChanged(BindableObject bindable, object oldValue, object newValue)

//handle log in/log out event
    if ((bool) newValue)
       //user just logged in logic
    else
      //user just logged out logic

Login.xaml

<StackLayout>
    <Label
        FontSize="45"
        HorizontalOptions="FillAndExpand"
        Text="Login Page" />
    <Button Clicked="Button_Clicked" Text="Log In" />
</StackLayout>

Login.xaml.cs

private async void Button_Clicked(object sender, System.EventArgs e)

    IsVisible = false;                          //hide login page
    //Trigger the binding to show pages previously hidden
    (Shell.Current as AppShell).IsLogged = true;
    await Shell.Current.GoToAsync("//Page2");   //navigate to main page (next after log)
                                               //Enable the flyout: hamburger button
    Shell.Current.FlyoutBehavior = FlyoutBehavior.Flyout;  


标签也是如此

在此示例中,“符号”底部选项卡对于属于底部选项卡“字母”的上部选项卡“B”将不可见,直到用户登录,其余底部选项卡最初将可见。

AppShell.xaml

<TabBar>
    <ShellContent Title="Login" Route="Login">
        <local:Login />
    </ShellContent>

    <Tab Title="Letters">
        <ShellContent
            Title="A"
            ContentTemplate="DataTemplate local:Page1"
            Route="Page1" />

        <ShellContent
            Title="B"
            ContentTemplate="DataTemplate local:Page2"
            IsVisible="Binding IsLogged"
            Route="Page2" />

        <ShellContent
            Title="C"
            ContentTemplate="DataTemplate local:Page3"
            Route="Page3" />
    </Tab>

    <Tab Title="Digits">
        <ShellContent
            Title="100"
            ContentTemplate="DataTemplate local:Page4"
            Route="Page4" />
    </Tab>

    <Tab Title="Symbols" IsVisible="Binding IsLogged">
        <ShellContent
            Title="!"
            ContentTemplate="DataTemplate local:Page5"
            Route="Page5" />
    </Tab>
</TabBar>

编辑

您可能还想在Tabbar的情况下添加Shell.NavBarIsVisible="False"Shell.TabBarIsVisible="false"到LoginPage分别隐藏导航栏和隐藏底部标签栏。

【讨论】:

谢谢!我想我可以用这个例子来构建我的用例。 AppShell 从何而来?这是您的主页还是应该出现在 xamarin 应用程序中的东西? @GuidoG 是的,它是 MainPage,也可以随意命名,只要您继承 Shell

根据用户的角色和状态登录laravel

...aravelAuth()方法登录用户。如果特定用户具有“role=1”,我如何将特定用户重定向到管理/仪表板页面,如果他具有“role=2”,如何将用户重定向到用户/主页?如果用户的状态被阻止(status=0),我该如何阻止用 查看详情

如何在 Firebase 中实现基于角色的访问控制

】如何在Firebase中实现基于角色的访问控制【英文标题】:howdoIimplementrolebasedaccesscontrolinfirebase【发布时间】:2013-10-3111:39:04【问题描述】:这是我第一次涉足Firebase和nosql,我来自SQL背景。使用简单登录安全电子邮件/密码,如何... 查看详情

根据用户角色限制用户控制的功能

】根据用户角色限制用户控制的功能【英文标题】:limitfunctionalityofusercontrolbasedontheuserrole【发布时间】:2012-07-0716:28:50【问题描述】:在ASP.NetMVCWeb应用程序中创建能够根据用户角色或用户本身限制其功能的用户控件的最佳实践... 查看详情

如何使用spring security根据角色限制对html页面的访问?

】如何使用springsecurity根据角色限制对html页面的访问?【英文标题】:Howtorestrictaccesstohtmlpagesbasedonroleswithspringsecurity?【发布时间】:2016-12-2619:28:35【问题描述】:我希望用户能够根据他们的角色访问html页面。例如,只有HR角色... 查看详情

如何使用 Spring Security 在我的控制器中获取用户登录的角色

】如何使用SpringSecurity在我的控制器中获取用户登录的角色【英文标题】:HowtogettherolethatauserloggedinwithinmycontrollerusingSpringSecurity【发布时间】:2015-05-1923:08:12【问题描述】:我正在尝试为授权和身份验证实现Spring安全功能。我面... 查看详情

根据用户类型限制对页面的访问

...,但是当他编写一个他可以访问的管理url时,我的问题是如何验证用户类型和授予对页面的访 查看详情

如何限制grails shiro security中的操作

】如何限制grailsshirosecurity中的操作【英文标题】:howtorestrictactioningrailsshirosecurity【发布时间】:2011-08-1411:37:52【问题描述】:.请指导我,我的控制器中有两种方法,一种是登录,第二种是注销。在我的数据库中定义了1个角色... 查看详情

根据用户角色和权限显示导航栏 laravel

】根据用户角色和权限显示导航栏laravel【英文标题】:displayingnavbaraccordingtouserrolesandpermisionslaravel【发布时间】:2015-08-2302:42:30【问题描述】:我在laravel5中实现用户角色,我想根据用户权限更新导航栏。默认导航栏具有重定向... 查看详情

用户角色权限控制的杂记

...,点击某个按钮,以及每个用户看到的页面的内容不同;如何控制、实现的呢? 在用户登录时,系统则需要检验用户的身份,在访问某个页面时则需要校验该用户是否由此权限;  可知一个用户可以访问多个页面和点击多个... 查看详情

对用户的基于角色的访问控制

...User类型可以是8个:无,Admin,Asst.Admin,......所以我想允许根据以下类型访问不同的页面:1)类型定义:NoneC 查看详情

如何建立远程桌面服务web访问端口

一:如何建立远程桌面服务Web访问端口?远程桌面服务Web访问是一个很棒的功能,管理员可以用它为世界各地的用户发布托管的应用程序。有了它,用户只需要一个浏览器登录到端口,并且使用的Windows版本支持远程桌面客户端软... 查看详情

postgresql怎么给一个用户赋予权限

...。1、角色PostgreSQL使用角色的概念管理数据库访问权限。根据角色自身的设置不同,一个角色可以看作是一个数据库用户,或者一组数据库用户。角色可以拥有数据库对象(比如表)以及可以把这些对象上的权限赋予其它角色,... 查看详情

数据库用户权限管理

角色(Role)PostgreSQL使用角色的概念管理数据库访问权限。根据角色自身的设置不同,一个角色可以看做是一个数据库用户,或者一组数据库用户。角色可以拥有数据库对象(比如表)以及可以把这些对象上的权限赋予其它角色,以控... 查看详情

如何高度限制具有“特定角色”的用户从“某个地方”访问应用程序?

】如何高度限制具有“特定角色”的用户从“某个地方”访问应用程序?【英文标题】:HowtoHIGHLYrestrictuserswith"specificroles"toaccesstheapplicationfrom"acertainplace"?【发布时间】:2013-08-0303:39:49【问题描述】:我需要限制特... 查看详情

如何根据登录用户角色显示 aspx 页面的某些部分

】如何根据登录用户角色显示aspx页面的某些部分【英文标题】:Howtoshoworhidecontentsofanaspxpagebasedoncurrentuser\'sroles【发布时间】:2013-06-2910:06:35【问题描述】:我有一个asp.net站点..每个页面都有一些内容,每个登录用户都有一些角... 查看详情

雪花中角色和用户的限制

...描述】:在雪花中创建自定义角色和用户有什么限制吗?根据我的用例,我想根据不同的角色创建多个用户。每个用户需要创建一个角色,每个角色可以是多个角色的父级。所以我想了解no的限制。雪花中的角色和用户。【问题... 查看详情

后台管理系统的权限控制与管理

...到权限数据,当然,这个需要后端返回数据的支持,前端根据权限数据,展示对应的菜单,点击菜单才能查看相关的界面如果用户没有登录,手动在地址栏敲入管理界面地址,则需要跳转到登录页面如果用户已经登录,如果手动... 查看详情

使用反应钩子,用户如何根据管理员访问导航到受保护的路由

】使用反应钩子,用户如何根据管理员访问导航到受保护的路由【英文标题】:Usingreacthookshowcanausernavigatestoprotectedroutesbasedonadminaccess【发布时间】:2021-11-0517:30:45【问题描述】:在用户登录时使用protected.route如何让用户导航到Da... 查看详情