diff --git a/controllers/account.go b/controllers/account.go
index 6d4ee5e8..2b5218f0 100644
--- a/controllers/account.go
+++ b/controllers/account.go
@@ -90,7 +90,6 @@ func (c *ApiController) Signup() {
Id: util.GenerateId(),
Type: "normal-user",
Password: form.Password,
- PasswordType: "plain",
DisplayName: form.Name,
Avatar: "https://casbin.org/img/casbin.svg",
Email: form.Email,
diff --git a/object/check.go b/object/check.go
index 3f163051..bceec82f 100644
--- a/object/check.go
+++ b/object/check.go
@@ -56,20 +56,22 @@ func CheckUserSignup(organization string, username string, password string, disp
}
func checkPassword(user *User, password string) string {
- if user.PasswordType == "plain" {
+ organization := getOrganization("admin", user.Owner)
+
+ if organization.PasswordType == "plain" {
if password == user.Password {
return ""
} else {
return "password incorrect"
}
- } else if user.PasswordType == "salt" {
+ } else if organization.PasswordType == "salt" {
if getSaltedPassword(password) == user.Password {
return ""
} else {
return "password incorrect"
}
} else {
- return fmt.Sprintf("unsupported password type: %s", user.PasswordType)
+ return fmt.Sprintf("unsupported password type: %s", organization.PasswordType)
}
}
@@ -79,15 +81,15 @@ func CheckUserLogin(organization string, username string, password string) (*Use
return nil, "the user does not exist, please sign up first"
}
+ if user.IsForbidden {
+ return nil, "the user is forbidden to sign in, please contact the administrator"
+ }
+
msg := checkPassword(user, password)
if msg != "" {
return nil, msg
}
- if user.IsForbidden {
- return nil, "the user is forbidden to sign in, please contact the administrator"
- }
-
return user, ""
}
diff --git a/object/init.go b/object/init.go
index 8c7bef68..2036aefe 100644
--- a/object/init.go
+++ b/object/init.go
@@ -15,11 +15,12 @@ func initBuiltInOrganization() {
}
organization = &Organization{
- Owner: "admin",
- Name: "built-in",
- CreatedTime: util.GetCurrentTime(),
- DisplayName: "Built-in Organization",
- WebsiteUrl: "https://example.com",
+ Owner: "admin",
+ Name: "built-in",
+ CreatedTime: util.GetCurrentTime(),
+ DisplayName: "Built-in Organization",
+ WebsiteUrl: "https://example.com",
+ PasswordType: "plain",
}
AddOrganization(organization)
}
@@ -36,7 +37,6 @@ func initBuiltInUser() {
CreatedTime: util.GetCurrentTime(),
Id: util.GenerateId(),
Password: "123",
- PasswordType: "plain",
DisplayName: "Admin",
Avatar: "https://casbin.org/img/casbin.svg",
Email: "admin@example.com",
diff --git a/object/organization.go b/object/organization.go
index b439dea0..9862626c 100644
--- a/object/organization.go
+++ b/object/organization.go
@@ -24,9 +24,10 @@ type Organization struct {
Name string `xorm:"varchar(100) notnull pk" json:"name"`
CreatedTime string `xorm:"varchar(100)" json:"createdTime"`
- DisplayName string `xorm:"varchar(100)" json:"displayName"`
- WebsiteUrl string `xorm:"varchar(100)" json:"websiteUrl"`
- Favicon string `xorm:"varchar(100)" json:"favicon"`
+ DisplayName string `xorm:"varchar(100)" json:"displayName"`
+ WebsiteUrl string `xorm:"varchar(100)" json:"websiteUrl"`
+ Favicon string `xorm:"varchar(100)" json:"favicon"`
+ PasswordType string `xorm:"varchar(100)" json:"passwordType"`
}
func GetOrganizations(owner string) []*Organization {
diff --git a/object/user.go b/object/user.go
index 2faa808d..05747c3a 100644
--- a/object/user.go
+++ b/object/user.go
@@ -30,7 +30,6 @@ type User struct {
Id string `xorm:"varchar(100)" json:"id"`
Type string `xorm:"varchar(100)" json:"type"`
Password string `xorm:"varchar(100)" json:"password"`
- PasswordType string `xorm:"varchar(100)" json:"passwordType"`
DisplayName string `xorm:"varchar(100)" json:"displayName"`
Avatar string `xorm:"varchar(255)" json:"avatar"`
Email string `xorm:"varchar(100)" json:"email"`
diff --git a/original/sync.go b/original/sync.go
index cc32dc52..9883ffac 100644
--- a/original/sync.go
+++ b/original/sync.go
@@ -30,7 +30,6 @@ func createUserFromOriginalUser(originalUser *User) *object.User {
Id: strconv.Itoa(originalUser.Id),
Type: "normal-user",
Password: originalUser.Password,
- PasswordType: "salt",
DisplayName: originalUser.Name,
Avatar: fmt.Sprintf("%s%s", avatarBaseUrl, originalUser.Avatar),
Email: "",
diff --git a/web/src/OrganizationEditPage.js b/web/src/OrganizationEditPage.js
index 497b500e..f9bfe104 100644
--- a/web/src/OrganizationEditPage.js
+++ b/web/src/OrganizationEditPage.js
@@ -13,12 +13,14 @@
// limitations under the License.
import React from "react";
-import {Button, Card, Col, Input, Row} from 'antd';
+import {Button, Card, Col, Input, Row, Select} from 'antd';
import * as OrganizationBackend from "./backend/OrganizationBackend";
import * as Setting from "./Setting";
import i18next from "i18next";
import {LinkOutlined} from "@ant-design/icons";
+const { Option } = Select;
+
class OrganizationEditPage extends React.Component {
constructor(props) {
super(props);
@@ -124,6 +126,19 @@ class OrganizationEditPage extends React.Component {
}} />
+
+
+ {i18next.t("general:Password type")}:
+
+
+
+
+
)
}
diff --git a/web/src/OrganizationListPage.js b/web/src/OrganizationListPage.js
index 101beab1..260b95f1 100644
--- a/web/src/OrganizationListPage.js
+++ b/web/src/OrganizationListPage.js
@@ -142,6 +142,13 @@ class OrganizationListPage extends React.Component {
)
}
},
+ {
+ title: i18next.t("general:Password type"),
+ dataIndex: 'passwordType',
+ key: 'passwordType',
+ width: '150px',
+ sorter: (a, b) => a.passwordType.localeCompare(b.passwordType),
+ },
{
title: i18next.t("general:Action"),
dataIndex: '',
diff --git a/web/src/UserEditPage.js b/web/src/UserEditPage.js
index 9d5cb278..8dbbfeb2 100644
--- a/web/src/UserEditPage.js
+++ b/web/src/UserEditPage.js
@@ -261,19 +261,6 @@ class UserEditPage extends React.Component {
-
-
- {i18next.t("general:Password type")}:
-
-
-
-
-
{i18next.t("general:Password")}:
diff --git a/web/src/UserListPage.js b/web/src/UserListPage.js
index 300a0126..4ad6fd25 100644
--- a/web/src/UserListPage.js
+++ b/web/src/UserListPage.js
@@ -130,20 +130,6 @@ class UserListPage extends React.Component {
return Setting.getFormattedDate(text);
}
},
- // {
- // title: 'Password type',
- // dataIndex: 'passwordType',
- // key: 'passwordType',
- // width: '150px',
- // sorter: (a, b) => a.passwordType.localeCompare(b.passwordType),
- // },
- // {
- // title: 'Password',
- // dataIndex: 'password',
- // key: 'password',
- // width: '150px',
- // sorter: (a, b) => a.password.localeCompare(b.password),
- // },
{
title: i18next.t("general:Display name"),
dataIndex: 'displayName',