• SRF之权限控制


    框架目前提供url访问、菜单和页面元素的权限控制和数据权限,权限基于角色来分配,1个用户可以属于多个角色,权限项分模块、页面、操作3级别,其中模块、页面用于url和菜单的控制,操作是对页面元素的控制。
    相关模块
    链接库:SRF.Security.dll、SRF.Components.Security.dll
    业务层:SRF.DomainModel.Admin
     

    如何使用

     
    1、web.config相关的配置

        <configSections>
            <section name="MembershipProvider" type="SRF.Security.Principal.MembershipSection, SRF.Security" requirePermission="false" allowDefinition="MachineToApplication" restartOnExternalChanges="true"/>
            <section name="PermissionProvider" type="SRF.Security.Permission.PermissionSection, SRF.Security" requirePermission="false" allowDefinition="MachineToApplication" restartOnExternalChanges="true"/>
            <section name="SecurityProvider" type="SRF.Security.SecuritySection, SRF.Security" requirePermission="false" allowDefinition="MachineToApplication" restartOnExternalChanges="true"/>
            <section name="DataRuleProvider" type="SRF.Security.DataRule.DataRuleSection,SRF.Security" requirePermission="false" allowDefinition="MachineToApplication" restartOnExternalChanges="true"/>
            <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
        </configSections>
        <MembershipProvider defaultProvider="MyMembershipProvider">
            <providers>
                <add name="MyMembershipProvider" type="SRF.Components.Security.MyMembershipProvider, SRF.Components.Security"/>
            </providers>
        </MembershipProvider>
        <PermissionProvider defaultProvider="MyPermissionProvider">
            <providers>
                <add name="MyPermissionProvider" type="SRF.Components.Security.MyPermissionProvider, SRF.Components.Security"/>
            </providers>
        </PermissionProvider>
        <DataRuleProvider defaultProvider="MyDataRuleProvider">
            <providers>
                <add name="MyDataRuleProvider" type="SRF.Components.Security.MyDataRuleProvider, SRF.Components.Security"/>
            </providers>
        </DataRuleProvider>
        <appSettings> 
            <!--是否对用户密码加密-->
            <add key="EncryptPassword" value="true"/>
            <add key="MvcSiteMapProvider_SiteMapFileName" value="~/Mvc.sitemap"/>
            <add key="MvcSiteMapProvider_SecurityTrimmingEnabled" value="true"/>
            <add key="MvcSiteMapProvider_DefaultSiteMapNodeVisibiltyProvider" value="SRF.UI.SiteMapNodeVisibilityProvider, SRF.UI"/>
        </appSettings>
    View Code

    2、调用

    (1)配置

    在后台配置功能和和数据权限。

    (2)在控制器类或控制器的函数上加[Authorize],表示只有配置访问给Action时进行验证,如

        [Authorize]
        public class DefaultController : Controller
       {}

    (3)html标签权限

    根据权限配置控制html标签的显示/有效。
    在页面增加下边的代码:
    @Html.Authorize(
         new ActionItem("#add", "visible", "allowadd") //标签selector,属性(display、visible、enabled),操作编码
     )

      (*这里是通过js来实现html标签的控制,不保证安全)

    (4)数据权限

    在后台配置数据规则和sql配置的变量相对应,如

    数据规则配置的过滤条件为 ”and CreatedBy=@user.id ”,sql语句:select*from OM_Order where 1=1 {$rule.byuser$}

    那么用户拥有该数据规则的权限则用该过滤条件替换语句的相应的语句片段。

    (5)安全相关的功能在SRF.Security.SecurityContext,提供登陆、注销、当前用户、检测是否具有访问权限等函数
      

    如何实现

    1、模型

    一个用户可以属于多个角色,给角色分配权限

    2、url验证

    url访问验证有SRF.Security.Authorize调用 SecurityContext.HasUrlGrant()进行验证

    3、html标签的显示/有效的控制
    @Html.Authorize() 根据参数和权限配置生成js脚本,调用common.js的security.verify()。


    4、菜单权限
    网站的导航菜单采用MvcSiteMapProvider.dll实现,SiteMapAclModule实现导航菜单的验证

        /// <summary>
        /// 菜单节点过滤器
        /// </summary>
        public class SiteMapNodeVisibilityProvider : MvcSiteMapProvider.FilteredSiteMapNodeVisibilityProvider
        {
            public override bool IsVisible(MvcSiteMapProvider.ISiteMapNode node, IDictionary<string, object> sourceMetadata)
            {
                bool visible = base.IsVisible(node, sourceMetadata);
                if (visible)
                {
                    visible = SRF.Security.SecurityContext.HasUrlGrant(node.Url);
                }
    
                return visible;
            }
        }

    在web.config:

     <add key="MvcSiteMapProvider_DefaultSiteMapNodeVisibiltyProvider" value="SRF.UI.SiteMapNodeVisibilityProvider, SRF.UI"/>
  • 相关阅读:
    扩展中国剩余定理
    bzoj 3816&&uoj #41. [清华集训2014]矩阵变换
    THUSC2017
    bzoj 4521: [Cqoi2016]手机号码
    bzoj 4871: [Shoi2017]摧毁“树状图”
    bzoj 2300 : [HAOI2011]防线修建
    bzoj 3853 : GCD Array
    HEOI 2017 游记
    bzoj3926: [Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机模板
    bzoj 4310 跳蚤
  • 原文地址:https://www.cnblogs.com/zengyy/p/3361368.html
Copyright © 2020-2023  润新知