如何使用html
一、web.config相關的配置node
<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>
二、調用web
(1)配置sql
在後臺配置功能和和數據權限。安全
(2)在控制器類或控制器的函數上加[Authorize],表示只有配置訪問給Action時進行驗證,如app
[Authorize] public class DefaultController : Controller {}
(3)html標籤權限框架
@Html.Authorize( new ActionItem("#add", "visible", "allowadd") //標籤selector,屬性(display、visible、enabled),操做編碼 )
(*這裏是經過js來實現html標籤的控制,不保證安全)ide
(4)數據權限函數
在後臺配置數據規則和sql配置的變量相對應,如網站
數據規則配置的過濾條件爲 」and CreatedBy=@user.id 」,sql語句:select*from OM_Order where 1=1 {$rule.byuser$}
那麼用戶擁有該數據規則的權限則用該過濾條件替換語句的相應的語句片斷。
如何實現
一、模型
一個用戶能夠屬於多個角色,給角色分配權限
二、url驗證
url訪問驗證有SRF.Security.Authorize調用 SecurityContext.HasUrlGrant()進行驗證
三、html標籤的顯示/有效的控制
@Html.Authorize() 根據參數和權限配置生成js腳本,調用common.js的security.verify()。
四、菜單權限
網站的導航菜單採用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"/>