Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

implement permission based authorization #46

Merged
merged 12 commits into from
Dec 30, 2020
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\..\..\..\src\EasyAbp.Abp.SettingUi.Application.Contracts\EasyAbp.Abp.SettingUi.Application.Contracts.csproj" />
<ProjectReference Include="..\MyAbpApp.Domain.Shared\MyAbpApp.Domain.Shared.csproj" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Volo.Abp.Account;
using EasyAbp.Abp.SettingUi;
using Volo.Abp.Account;
using Volo.Abp.FeatureManagement;
using Volo.Abp.Identity;
using Volo.Abp.Modularity;
Expand All @@ -15,7 +16,8 @@ namespace MyAbpApp
typeof(AbpIdentityApplicationContractsModule),
typeof(AbpPermissionManagementApplicationContractsModule),
typeof(AbpTenantManagementApplicationContractsModule),
typeof(AbpObjectExtendingModule)
typeof(AbpObjectExtendingModule),
typeof(SettingUiApplicationContractsModule)
)]
public class MyAbpAppApplicationContractsModule : AbpModule
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,50 @@
using MyAbpApp.Localization;
using EasyAbp.Abp.SettingUi.Authorization;
using MyAbpApp.Localization;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Localization;

namespace MyAbpApp.Permissions
{
public class MyAbpAppPermissionDefinitionProvider : PermissionDefinitionProvider
{
public override void Define(IPermissionDefinitionContext context)
{
var myGroup = context.AddGroup(MyAbpAppPermissions.GroupName);
public class MyAbpAppPermissionDefinitionProvider : PermissionDefinitionProvider
{
public override void Define(IPermissionDefinitionContext context)
{
var myGroup = context.AddGroup(MyAbpAppPermissions.GroupName);

//Define your own permissions here. Example:
//myGroup.AddPermission(MyAbpAppPermissions.MyPermission1, L("Permission:MyPermission1"));
}
//Define your own permissions here. Example:
//myGroup.AddPermission(MyAbpAppPermissions.MyPermission1, L("Permission:MyPermission1"));

private static LocalizableString L(string name)
{
return LocalizableString.Create<MyAbpAppResource>(name);
}
}
var settingUiHostPermission = context.GetPermissionOrNull(SettingUiPermissions.Host.Default);
var setttingUiUserPermission = context.GetPermissionOrNull(SettingUiPermissions.User.Default);
var settingUiTenantPermission = context.GetPermissionOrNull(SettingUiPermissions.Tenant.Default);

// group 1
var systemGroup = settingUiTenantPermission.AddChild(System.Default, L("Permission:SettingUi.System"));
// group 2
var passwordGroup = systemGroup.AddChild(System.Password.Group2, L("Permission:SettingUi.System.Password"));
passwordGroup.AddChild(
System.Password.RequiredLength,
L("Permission:SettingUi.System.Password.RequiredLength")
);
passwordGroup.AddChild(
System.Password.RequiredUniqueChars,
L("Permission:SettingUi.System.Password.RequiredUniqueChars")
);

// group 1
var settingExampleGroup = settingUiTenantPermission.AddChild(SettingExample.Default, L("Permission:SettingUi.SettingExample"));
// group 2
var aSettings = settingExampleGroup.AddChild(SettingExample.ASettings.GroupName, L("Permission:SettingUi.SettingExample.ASettings"));
aSettings.AddChild(
SettingExample.ASettings.Setting1,
L("Permission:SettingUi.SettingExample.ASettings.Setting1")
);
var bSettings = settingExampleGroup.AddChild(SettingExample.BSettings.GroupName, L("Permission:SettingUi.SettingExample.BSettings"));
}

private static LocalizableString L(string name)
{
return LocalizableString.Create<MyAbpAppResource>(name);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,40 @@
namespace MyAbpApp.Permissions
using EasyAbp.Abp.SettingUi.Authorization;

namespace MyAbpApp.Permissions
{
public static class MyAbpAppPermissions
{
public const string GroupName = "MyAbpApp";
public static class MyAbpAppPermissions
{
public const string GroupName = "MyAbpApp";

//Add your own permission names. Example:
//public const string MyPermission1 = GroupName + ".MyPermission1";
}

public static class System
{
public const string Default = SettingUiPermissions.GroupName + ".System";
public static class Password
{
public const string Group2 = Default + ".Password";
public const string RequiredLength = Group2 + ".Abp.Identity.Password.RequiredLength";
public const string RequiredUniqueChars = Group2 + ".Abp.Identity.Password.RequiredUniqueChars";
}
}

public static class SettingExample
{
public const string Default = SettingUiPermissions.GroupName + ".SettingExample";

public static class ASettings
{
public const string GroupName = Default + ".ASettings";

public const string Setting1 = GroupName + ".Setting1";
}

//Add your own permission names. Example:
//public const string MyPermission1 = GroupName + ".MyPermission1";
}
public static class BSettings
{
public const string GroupName = Default + ".BSettings";
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@

"Description:Connection.Ip": "The IP address of the server.",
"Description:Connection.Port": "The Port number of the server.",
"Description:Connection.Protocol": "The protocol of the connection."
"Description:Connection.Protocol": "The protocol of the connection.",

"Permission:SettingUi.System": "Show System Group",
"Permission:SettingUi.System.Password": "Show Password Group",
"Permission:SettingUi.System.Password.RequiredLength": "Show RequiredLength Setting",
"Permission:SettingUi.System.Password.RequiredUniqueChars": "Show RequiredUniqueChars Setting"
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
{
"culture": "tr",
"texts": {
"Menu:Home": "Ana sayfa",
"Welcome": "Hoşgeldiniz",
"LongWelcomeMessage": "Uygulamaya hoşgeldiniz. Bu, ABP framework'ü üzerine bina edilmiş bir başlangıç projesidir. Daha fazla bilgi için abp.io adresini ziyaret edebilirsiniz."
}
"culture": "tr",
"texts": {
"Menu:Home": "Ana sayfa",
"Welcome": "Hoşgeldiniz",
"LongWelcomeMessage": "Uygulamaya hoşgeldiniz. Bu, ABP framework'ü üzerine bina edilmiş bir başlangıç projesidir. Daha fazla bilgi için abp.io adresini ziyaret edebilirsiniz.",

"Permission:SettingUi.System": "System Grubunu Göster",
"Permission:SettingUi.System.Password": "Password Grubunu Göster",
"Permission:SettingUi.System.Password.RequiredLength": "RequiredLength Ayarını Göster",
"Permission:SettingUi.System.Password.RequiredUniqueChars": "RequiredUniqueChars Ayarını Göster"
}
}
Original file line number Diff line number Diff line change
@@ -1,40 +1,67 @@
using MyAbpApp.Localization;
using EasyAbp.Abp.SettingUi;
using MyAbpApp.Localization;
using Volo.Abp.Localization;
using Volo.Abp.Settings;

namespace MyAbpApp.Settings
{
public class MyAbpAppSettingDefinitionProvider : SettingDefinitionProvider
{
public override void Define(ISettingDefinitionContext context)
{
context.Add(
// Set properties with "WithProperty" method
new SettingDefinition(
"Connection.Ip",
"127.0.0.1",
L("DisplayName:Connection.Ip"),
L("Description:Connection.Ip"))
.WithProperty("Group1", "Server")
.WithProperty("Group2", "Connection"),
public class MyAbpAppSettingDefinitionProvider : SettingDefinitionProvider
{
public override void Define(ISettingDefinitionContext context)
{
context.Add(
// Set properties with "WithProperty" method
new SettingDefinition(
"Connection.Ip",
"127.0.0.1",
L("DisplayName:Connection.Ip"),
L("Description:Connection.Ip"))
.WithProperty("Group1", "Server")
.WithProperty("Group2", "Connection"),

// The properties are defined in the "MyAbpAppSettingProperties.json" file
new SettingDefinition(
"Connection.Port",
8080.ToString(),
L("DisplayName:Connection.Port"),
L("Description:Connection.Port")
),

// If a setting's DisplayName and Description are not defined, we can still localize it by using our own localization resources.
// Just add the localization resources to the `SettingUiResource`, see `ConfigureLocalizationServices` method in `MyAbpAppWebModule`
new SettingDefinition("Connection.Protocol")
);
}
// The properties are defined in the "MyAbpAppSettingProperties.json" file
new SettingDefinition(
"Connection.Port",
8080.ToString(),
L("DisplayName:Connection.Port"),
L("Description:Connection.Port")
),

private static LocalizableString L(string name)
{
return LocalizableString.Create<MyAbpAppResource>(name);
}
}
// If a setting's DisplayName and Description are not defined, we can still localize it by using our own localization resources.
// Just add the localization resources to the `SettingUiResource`, see `ConfigureLocalizationServices` method in `MyAbpAppWebModule`
new SettingDefinition("Connection.Protocol")
);

context.Add(
new SettingDefinition(
MyAbpAppSettings.SettingExample.ASettings.Setting1,
"setting 1 value")
.WithProperty(SettingUiConst.Group1, MyAbpAppSettings.SettingExample.Default)
.WithProperty(SettingUiConst.Group2, MyAbpAppSettings.SettingExample.ASettings.GroupName),
new SettingDefinition(
MyAbpAppSettings.SettingExample.ASettings.Setting2,
"500")
.WithProperty(SettingUiConst.Group1, MyAbpAppSettings.SettingExample.Default)
.WithProperty(SettingUiConst.Group2, MyAbpAppSettings.SettingExample.ASettings.GroupName)
.WithProperty(SettingUiConst.Type, "number"),
new SettingDefinition(
MyAbpAppSettings.SettingExample.ASettings.Setting3,
"true")
.WithProperty(SettingUiConst.Group1, MyAbpAppSettings.SettingExample.Default)
.WithProperty(SettingUiConst.Group2, MyAbpAppSettings.SettingExample.ASettings.GroupName)
.WithProperty(SettingUiConst.Type, "checkbox"),

new SettingDefinition(
MyAbpAppSettings.SettingExample.BSettings.Setting1,
"setting 1 value")
.WithProperty(SettingUiConst.Group1, MyAbpAppSettings.SettingExample.Default)
.WithProperty(SettingUiConst.Group2, MyAbpAppSettings.SettingExample.BSettings.GroupName)
);
}

private static LocalizableString L(string name)
{
return LocalizableString.Create<MyAbpAppResource>(name);
}
}
}
34 changes: 28 additions & 6 deletions sample/MyAbpApp/src/MyAbpApp.Domain/Settings/MyAbpAppSettings.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,32 @@
namespace MyAbpApp.Settings
{
public static class MyAbpAppSettings
{
private const string Prefix = "MyAbpApp";
public static class MyAbpAppSettings
{
private const string Prefix = "MyAbpApp";

//Add your own setting names here. Example:
//public const string MySetting1 = Prefix + ".MySetting1";
}
//Add your own setting names here. Example:
//public const string MySetting1 = Prefix + ".MySetting1";

public static class SettingExample
{
public const string Default = "SettingExample";
public static class ASettings
{
// important note: dont start with Default value
public const string GroupName = "ASettings";

public const string Setting1 = GroupName + ".Setting1";
public const string Setting2 = GroupName + ".Setting2";
public const string Setting3 = GroupName + ".Setting3";
}

public static class BSettings
{
// important note: dont start with Default value
public const string GroupName = "BSettings";

public const string Setting1 = GroupName + ".Setting1";
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@ public class SettingUiPermissionDefinitionProvider : PermissionDefinitionProvide
public override void Define(IPermissionDefinitionContext context)
{
var moduleGroup = context.AddGroup(SettingUiPermissions.GroupName, L("Permission:SettingUi"));
moduleGroup.AddPermission(SettingUiPermissions.Tenant, L("Permission:SettingUi.Tenant"));
var showSettingPagePermission = moduleGroup.AddPermission(SettingUiPermissions.ShowSettingPage, L("Permission:SettingUi.ShowSettingPage"));
showSettingPagePermission.AddChild(SettingUiPermissions.Host.Default, L("Permission:SettingUi.Host"), MultiTenancySides.Host);
showSettingPagePermission.AddChild(SettingUiPermissions.Tenant.Default, L("Permission:SettingUi.Tenant"));
showSettingPagePermission.AddChild(SettingUiPermissions.User.Default, L("Permission:SettingUi.User"));
}

private static LocalizableString L(string name)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,22 @@ namespace EasyAbp.Abp.SettingUi.Authorization
public class SettingUiPermissions
{
public const string GroupName = "SettingUi";
public const string Tenant = GroupName + ".Tenant";
public const string ShowSettingPage = GroupName + ".ShowSettingPage";

public static class Tenant
{
public const string Default = GroupName + ".Tenant";
}

public static class User
{
public const string Default = GroupName + ".User";
}

public static class Host
{
public const string Default = GroupName + ".Host";
}

public static string[] GetAll()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ public class SettingGroup
public string GroupName { get; set; }
public string GroupDisplayName { get; set; }
public List<SettingInfo> SettingInfos { get; set; }
public string Permission { get; set; }
}

public class SettingInfo
Expand All @@ -17,6 +18,7 @@ public class SettingInfo
public string Description { get; }
public string Value { get; }
public Dictionary<string, object> Properties { get; } = new Dictionary<string, object>();
public string Permission { get; set; }

public SettingInfo(string name, string displayName, string description, string value)
{
Expand Down